{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Skipping the Staging Area\n", "\n", "This reading contains the code used in the instructional videos from [**Skipping the Staging Area**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/uAFPm/skipping-the-staging-area).\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd scripts\n", "\n", "atom all\\_checks.py\n", "```\n", "\n", "## File with code\n", "\n", "```bash\n", "#!/usr/bin/env python3\n", "\n", "import os\n", "\n", "import sys\n", "\n", "def check\\_reboot():\n", "\n", "    \"\"\"Returns True if the computer has a pending reboot.\"\"\"\n", "\n", "    return os.path.exists(\"/run/reboot-required\")\n", "\n", "def main():\n", "\n", "    if check\\_reboot():\n", "\n", "        print(\"Pending Reboot.\")\n", "\n", "        sys.exit(1)\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "git commit \\-a \\-m \"Call check\\_reboot from main, exit with 1 on error\"\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master 033f27a\\] Call check\\_reboot from main, exit with 1 on error\n", "\n", " 1 file changed, 4 insertions(+), 1 deletion(-)\n", "\n", "```bash\n", "git log\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 033f27a8196987d61c4fd42930f2148b23434a03 (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 14:39:18 2019 +0200\n", "\n", "    Call check\\_reboot from main, exit with 1 on error\n", "\n", "commit cc1acbf10fdea6cc07ebf827697666b6a35b0f36\n", "\n", "Author: My name \n", "\n", "Date:   Thu Jul 11 17:19:32 2019 +0200\n", "\n", "    Add a check\\_reboot function\n", "\n", "commit 6cfc29966acda8213fcd8ac2735b31f3fdbc6c53\n", "\n", "Author: My name \n", "\n", "Date:   Thu Jul 11 12:08:46 2019 +0200\n", "\n", "    Create and empty all\\_checks.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Getting more information from the user\n", "\n", "This reading contains the code used in the instructional videos from [**Getting More Information About Our Changes**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/KLQkB/getting-more-information-about-our-changes)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "git log \\-p\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 033f27a8196987d61c4fd42930f2148b23434a03 (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 14:39:18 2019 +0200\n", "\n", "    Call check\\_reboot from main, exit with 1 on error\n", "\n", "diff --git a/all\\_checks.py b/all\\_checks.py\n", "\n", "index 340f1f7..710266a 100644\n", "\n", "\\--- a/all\\_checks.py\n", "\n", "+++ b/all\\_checks.py\n", "\n", "@@ -1,12 +1,15 @@\n", "\n", " #!/usr/bin/env python3\n", "\n", " import os\n", "\n", "+import sys\n", "\n", " def check\\_reboot():\n", "\n", "     \"\"\"Returns True if the computer has a pending reboot.\"\"\"\n", "\n", "     return os.path.exists(\"/run/reboot-required\")\n", "\n", "(...)\n", "\n", "```bash\n", "git log\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 033f27a8196987d61c4fd42930f2148b23434a03 (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 14:39:18 2019 +0200\n", "\n", "    Call check\\_reboot from main, exit with 1 on error\n", "\n", "commit **cc1acbf10fdea6cc07ebf827697666b6a35b0f36**\n", "\n", "Author: My name \n", "\n", "Date:   Thu Jul 11 17:19:32 2019 +0200\n", "\n", "    Add a check\\_reboot function\n", "\n", "(...)\n", "\n", "user@ubuntu:~/scripts$ git show cc1acbf10fdea6cc07ebf827697666b6a35b0f36\n", "\n", "commit cc1acbf10fdea6cc07ebf827697666b6a35b0f36\n", "\n", "Author: My name \n", "\n", "Date:   Thu Jul 11 17:19:32 2019 +0200\n", "\n", "    Add a check\\_reboot function\n", "\n", "diff --git a/all\\_checks.py b/all\\_checks.py\n", "\n", "index c0d03b3..340f1f7 100644\n", "\n", "\\--- a/all\\_checks.py\n", "\n", "+++ b/all\\_checks.py\n", "\n", "@@ -1,5 +1,11 @@\n", "\n", " #!/usr/bin/env python3\n", "\n", "+import os\n", "\n", "+\n", "\n", "+def check\\_reboot():\n", "\n", "+    \"\"\"Returns True if the computer has a pending reboot.\"\"\"\n", "\n", "+    return os.path.exists(\"/run/reboot-required\")\n", "\n", "+\n", "\n", " def main():\n", "\n", "     Pass\n", "\n", "```bash\n", "git log \\--stat\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 033f27a8196987d61c4fd42930f2148b23434a03 (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 14:39:18 2019 +0200\n", "\n", "    Call check\\_reboot from main, exit with 1 on error\n", "\n", " all\\_checks.py | 5 ++++-\n", "\n", " 1 file changed, 4 insertions(+), 1 deletion(-)\n", "\n", "(...)\n", "\n", "```bash\n", "atom  all\\_checks.py\n", "```\n", "\n", "## File in video\n", "\n", "```bash\n", "#!/usr/bin/env python3\n", "\n", "import os\n", "\n", "import sys\n", "\n", "def check\\_reboot():\n", "\n", "    \"\"\"Returns True if the computer has a pending reboot.\"\"\"\n", "\n", "    return os.path.exists(\"/run/reboot-required\")\n", "\n", "def main():\n", "\n", "    if check\\_reboot():\n", "\n", "        print(\"Pending Reboot.\")\n", "\n", "        sys.exit(1)\n", "\n", "    print(\"Everything ok.\")\n", "\n", "    sys.exit(0)\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "git diff\n", "```\n", "\n", "**Code output:**\n", "\n", "diff --git a/all\\_checks.py b/all\\_checks.py\n", "\n", "index 710266a..fdc4476 100644\n", "\n", "\\--- a/all\\_checks.py\n", "\n", "+++ b/all\\_checks.py\n", "\n", "@@ -12,4 +12,7 @@ def main():\n", "\n", "         print(\"Pending Reboot.\")\n", "\n", "         sys.exit(1)\n", "\n", "+    print(\"Everything ok.\")\n", "\n", "+    sys.exit(0)\n", "\n", "+\n", "\n", " main()\n", "\n", "```bash\n", "git  add \\-p\n", "```\n", "\n", "**Code output:**\n", "\n", "diff --git a/all\\_checks.py b/all\\_checks.py\n", "\n", "index 710266a..fdc4476 100644\n", "\n", "\\--- a/all\\_checks.py\n", "\n", "+++ b/all\\_checks.py\n", "\n", "@@ -12,4 +12,7 @@ def main():\n", "\n", "         print(\"Pending Reboot.\")\n", "\n", "         sys.exit(1)\n", "\n", "+    print(\"Everything ok.\")\n", "\n", "+    sys.exit(0)\n", "\n", "+\n", "\n", " main()\n", "\n", "Stage this hunk \\[y,n,q,a,d,e,?\\]? y\n", "\n", "user@ubuntu:~/scripts$ \n", "\n", "```bash\n", "git diff\n", "\n", "git diff \\--staged\n", "```\n", "\n", "**Code output:**\n", "\n", "diff --git a/all\\_checks.py b/all\\_checks.py\n", "\n", "index 710266a..fdc4476 100644\n", "\n", "\\--- a/all\\_checks.py\n", "\n", "+++ b/all\\_checks.py\n", "\n", "@@ -12,4 +12,7 @@ def main():\n", "\n", "         print(\"Pending Reboot.\")\n", "\n", "         sys.exit(1)\n", "\n", "+    print(\"Everything ok.\")\n", "\n", "+    sys.exit(0)\n", "\n", "+\n", "\n", " main()\n", "\n", "```bash\n", "git commit \\-m 'Add a message when everything is ok'\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master 49d610b\\] Add a message when everything is ok\n", "\n", " 1 file changed, 3 insertions(+)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Deleting and Renaming Files\n", "\n", "This reading contains the code used in the instructional videos from [**Deleting and Renaming FIles**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/3OT51/deleting-and-renaming-files)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd checks/\n", "\n", "ls \\-l\n", "```\n", "\n", "**Code output:**\n", "\n", "total 8\n", "\n", "\\-rw-rw-r-- 1 user user 659 Jul  9 19:28 disk\\_usage.py\n", "\n", "\\-rw-rw-r-- 1 user user 659 Jul 15 21:43 processes.py\n", "\n", "```bash\n", "git rm process.py\n", "```\n", "\n", "**Code output:**\n", "\n", "rm '[processes.pyOpens in a new tab](http://processes.py/)'\n", "\n", "```bash\n", "ls \\-l \n", "```\n", "\n", "**Code output:**\n", "\n", "total 4\n", "\n", "\\-rw-rw-r-- 1 user user 659 Jul  9 19:28 disk\\_usage.py\n", "\n", "```bash\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch master\n", "\n", "Changes to be committed:\n", "\n", "  (use \"git reset HEAD ...\" to unstage)\n", "\n", "        deleted:    [processes.pyOpens in a new tab](http://processes.py/)\n", "\n", "```bash\n", "git commit \\-m 'Delete unneeded processes file'\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master 9939311\\] Delete unneeded processes file\n", "\n", " 1 file changed, 24 deletions(-)\n", "\n", " delete mode 100644 processes.py\n", "\n", "```bash\n", "git mv disk\\_usage.py check\\_free\\_space.py\n", "\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch master\n", "\n", "Changes to be committed:\n", "\n", "  (use \"git reset HEAD ...\" to unstage)\n", "\n", "        renamed:    disk\\_usage.py -> check\\_free\\_space.py\n", "\n", "```bash\n", "git commit \\-m 'New name for disk\\_usage.py'\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master 7d7167b\\] New name for disk\\_usage.py\n", "\n", " 1 file changed, 0 insertions(+), 0 deletions(-)\n", "\n", "```bash\n", "echo .DS\\_STORE > gitignore\n", "\n", "ls \\-la\n", "```\n", "\n", "**Code output:**\n", "\n", "total 20\n", "\n", "drwxrwxr-x  3 user user 4096 Jul 15 22:15 .\n", "\n", "drwxr-xr-x 19 user user 4096 Jul 15 16:37 ..\n", "\n", "\\-rw-rw-r--  1 user user  659 Jul  9 19:28 check\\_free\\_space.py\n", "\n", "drwxrwxr-x  8 user user 4096 Jul 15 21:52 .git\n", "\n", "\\-rw-rw-r--  1 user user   10 Jul 15 22:15 .gitignore\n", "\n", "```bash\n", "git add .gitignore \n", "\n", "git commit \\-m 'Add a gitignore file, ignoring .DS\\_STORE files'\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master abb0632\\] Add a gitignore file, ignoring .DS\\_STORE files\n", "\n", " 1 file changed, 1 insertion(+)\n", "\n", " create mode 100644 .gitignore" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Study Guide: Advanced Git\n", "\n", "| Command | Explanation & Link |\n", "| --- | --- |\n", "| git commit -a | [$ git commit -aOpens in a new tab](https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---all) automatically stages the files that have been locally modified. New files which have not been published yet are not affected. |\n", "| git log -p | [$ git log -pOpens in a new tab](https://git-scm.com/docs/git-log#generate_patch_text_with_p) produces patch text that displays the lines of code that were changed in each commit in the current repo. |\n", "| git show | [$ git showOpens in a new tab](https://git-scm.com/docs/git-show) shows you one or more object(s) such as blobs, trees, tags, and commits. |\n", "| git diff | [$ git diffOpens in a new tab](https://git-scm.com/docs/git-diff) is similar to the Linux \\`diff\\` command, and can show the changes between commits, changes between the working tree and index, changes between two trees, changes from a merge, and so on. |\n", "| git diff --staged | [$ git diff --stagedOpens in a new tab](https://git-scm.com/docs/git-diff) is an alias of $ git diff --cached, which  shows all staged files compared to the named commit. |\n", "| git add -p | [$ git add -pOpens in a new tab](https://git-scm.com/docs/git-add) allows a user to interactively review patches before adding to the current commit. |\n", "| git mv | [$ git mvOpens in a new tab](https://git-scm.com/docs/git-mv) is similar to the Linux \\`mv\\` command. This command can move or rename a file, directory, or symlink. |\n", "| git rm | [$ git rm Opens in a new tab](https://git-scm.com/docs/git-rm)is similar to the Linux \\`rm\\` command. This command deletes or removes a file from the working tree. |\n", "\n", "There are many useful git command summaries online as well. Please take some time to research and study a few, such as [this oneOpens in a new tab](https://education.github.com/git-cheat-sheet-education.pdf).\n", "\n", "## .gitignore files\n", "\n", ".gitignore files are used to tell the git tool to intentionally ignore some files in a given Git repository. For example, this can be useful for configuration files or metadata files that a user may not want to check into the master branch. \n", "\n", "When writing a .gitignore file, there are some specific formats which help tell Git how to read the text in the file. For example, a line starting with # is a comment; a slash / is a directory separator. Visit [https://git-scm.com/docs/gitignoreOpens in a new tab](https://git-scm.com/docs/gitignore) to see more examples.\n", "\n", "[This GitHub repositoryOpens in a new tab](https://gist.github.com/octocat/9257657) offers some examples of configurations which are often included in a .gitignore file. These examples include: compiled sources, packages, logs, databases, and OS generated files." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Undoing Changes Before Committing\n", "\n", "This reading contains the code used in the instructional videos from [**Undoing changes before committing**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/LPJn7/undoing-changes-before-committing)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd scripts\n", "\n", "atom all\\_checks.py\n", "```\n", "\n", "## File in video\n", "\n", "```bash\n", "#!/usr/bin/env python3\n", "\n", "import os\n", "\n", "import sys\n", "\n", "def main():\n", "\n", "    if check\\_reboot():\n", "\n", "        print(\"Pending Reboot.\")\n", "\n", "        sys.exit(1)\n", "\n", "    print(\"Everything ok.\")\n", "\n", "    sys.exit(0)\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "./all\\_checks.py \n", "```\n", "\n", "**Code output:**\n", "\n", "Traceback (most recent call last):\n", "\n", "  File \"all\\_checks.py\", line 14, in \n", "\n", "    main()\n", "\n", "  File \"all\\_checks.py\", line 7, in main\n", "\n", "    if check\\_reboot():\n", "\n", "NameError: name 'check\\_reboot' is not defined\n", "\n", "```bash\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch master\n", "\n", "Changes not staged for commit:\n", "\n", "  (use \"git add ...\" to update what will be committed)\n", "\n", "  (use \"git checkout -- ...\" to discard changes in working directory)\n", "\n", "        modified:   all\\_checks.py\n", "\n", "```bash\n", "git checkout all\\_checks.py\n", "\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch master\n", "\n", "nothing to commit, working tree clean\n", "\n", "user@ubuntu:~/scripts$ ./all\\_checks.py \n", "\n", "Everything ok.\n", "\n", "```bash\n", "./all\\_checks.py \n", "```\n", "\n", "**Code output:**\n", "\n", "Everything ok.\n", "\n", "```bash\n", "./all\\_checks.py > output.txt\n", "\n", "git add \\*\n", "\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch master\n", "\n", "Changes to be committed:\n", "\n", "  (use \"git reset HEAD ...\" to unstage)\n", "\n", "        new file:   output.txt\n", "\n", "```bash\n", "git reset HEAD output.txt\n", "\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch master\n", "\n", "Untracked files:\n", "\n", "  (use \"git add ...\" to include in what will be committed)\n", "\n", "        Output.txt\n", "\n", "```bash\n", "git commit \\-m \"it should be os.path.exists\"\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Amending commits\n", "\n", "This reading contains the code used in the instructional videos from [**Amending commits**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/nT1S2/amending-commits)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd scripts/\n", "\n", "touch auto\\-update.py\n", "\n", "touch gather\\-information.sh\n", "\n", "ls \\-l\n", "```\n", "\n", "**Code output:**\n", "\n", "total 8\n", "\n", "\\-rwxrwxr-x 1 user user 319 Jul 16 17:56 all\\_checks.py\n", "\n", "\\-rw-rw-r-- 1 user user   0 Jul 16 20:19 auto-update.py\n", "\n", "\\-rw-rw-r-- 1 user user   0 Jul 16 20:19 gather-information.sh\n", "\n", "\\-rw-rw-r-- 1 user user  15 Jul 16 18:03 output.txt\n", "\n", "user@ubuntu:~/scripts$ git add auto-update.py \n", "\n", "user@ubuntu:~/scripts$ git commit -m 'Add two new scripts'\n", "\n", "\\[master 9c78761\\] Add two new scripts\n", "\n", " 1 file changed, 0 insertions(+), 0 deletions(-)\n", "\n", " create mode 100644 [auto-update.pyOpens in a new tab](http://auto-update.py/)\n", "\n", "```bash\n", "git add auto\\-update.py\n", "\n", "git commit \\-m 'Add two new scripts'\n", "```\n", "\n", "**Code output:**\n", "\n", "\\# Please enter the commit message for your changes. Lines starting\n", "\n", "\\# with '#' will be ignored, and an empty message aborts the commit.\n", "\n", "\\# Date:      Tue Jul 16 20:20:24 2019 +0200\n", "\n", "\\# On branch master\n", "\n", "\\# Changes to be committed:\n", "\n", "\\#       new file:   auto-update.py\n", "\n", "\\#       new file:   gather-information.sh\n", "\n", "\\# Untracked files:\n", "\n", "\\#       output.txt\n", "\n", "```bash\n", "git add gather\\-information.sh\n", "\n", "git commit \\--amend\n", "```\n", "\n", "## File in video\n", "\n", "```bash\n", "Add two new scripts.\n", "\n", "# Please enter the commit message for your changes. Line starting\n", "\n", "#with '#' will be ignored, and an empty message aborts the commit.\n", "\n", "#\n", "\n", "#Date: Mon Jan 6 08:28:17 2020 -0800\n", "\n", "#\n", "\n", "# On branch master\n", "\n", "# Changes to be committed:\n", "\n", "#   new file: auto-update.py\n", "\n", "#   new file: gather-information.sh\n", "\n", "#\n", "\n", "# Untracked files:\n", "\n", "#   output.txt\n", "```\n", "\n", "## File in video\n", "\n", "```bash\n", "Add two new scripts.\n", "\n", "gather\\-information.sh will collect information in case of errors.\n", "\n", "auto\\-update.py will run daily to update computers automatically.\n", "\n", "# Please enter the commit message for your changes. Line starting\n", "\n", "#with '#' will be ignored, and an empty message aborts the commit.\n", "\n", "#\n", "\n", "#Date: Mon Jan 6 08:28:17 2020 -0800\n", "\n", "#\n", "\n", "# On branch master\n", "\n", "# Changes to be committed:\n", "\n", "#   new file: auto-update.py\n", "\n", "#   new file: gather-information.sh\n", "\n", "#\n", "\n", "# Untracked files:\n", "\n", "#   output.txt\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Rollbacks\n", "\n", "This reading contains the code used in the instructional videos from [**Rollbacks**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/21kjM/rollbacks)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd scripts\n", "\n", "atom all\\_checks.py\n", "```\n", "\n", "## File in video\n", "\n", "```bash\n", "#!/usr/bin/env python3\n", "\n", "import os\n", "\n", "import sys\n", "\n", "def check\\_reboot():\n", "\n", "    \"\"\"Returns True if the computer has a pending reboot.\"\"\"\n", "\n", "    return os.path.exists(\"/run/reboot-required\")\n", "\n", "def main():\n", "\n", "    if check\\_reboot():\n", "\n", "        print(\"Pending Reboot.\")\n", "\n", "        sys.exit(1)\n", "\n", "    if disk\\_full():\n", "\n", "        print(\"Disk Full.\")\n", "\n", "        sys.exit(1)\n", "\n", "    print(\"Everything ok.\")\n", "\n", "    sys.exit(0)\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "git commit \\-a \\-m 'Add call to disk\\_full function'\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master ec61497\\] Add call to disk\\_full function\n", "\n", " 1 file changed, 4 insertions(+)\n", "\n", "```bash\n", "./all\\_checks.py \n", "```\n", "\n", "**Code output:**\n", "\n", "Traceback (most recent call last):\n", "\n", "  File \"./all\\_checks.py\", line 22, in \n", "\n", "    main()\n", "\n", "  File \"./all\\_checks.py\", line 15, in main\n", "\n", "    if disk\\_full():\n", "\n", "NameError: name 'disk\\_full' is not defined\n", "\n", "```bash\n", "git revert HEAD\n", "```\n", "\n", "**Code output:**\n", "\n", "Revert \"Add call to disk\\_full function\"\n", "\n", "Reason for rollback: The disk\\_full function is undefined.\n", "\n", "This reverts commit ec614976e1665b40134d2c01921f9b0fbf89d1e2.\n", "\n", "\\# Please enter the commit message for your changes. Lines starting\n", "\n", "\\# with '#' will be ignored, and an empty message aborts the commit.\n", "\n", "\\# On branch master\n", "\n", "\\# Changes to be committed:\n", "\n", "\\#       modified:   all\\_checks.py\n", "\n", "\\# Untracked files:\n", "\n", "\\#       output.txt\n", "\n", "```bash\n", "git revert HEAD\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master 91c4968\\] Revert \"Add call to disk\\_full function\"\n", "\n", " 1 file changed, 4 deletions(-)\n", "\n", "```bash\n", "git log \\-p \\-2\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 91c4968ebd80de900d71b9bc3f332f53149ac57d (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Tue Jul 16 21:43:18 2019 +0200\n", "\n", "    Revert \"Add call to disk\\_full function\"\n", "\n", "    Reason for rollback: The disk\\_full function is undefined.\n", "\n", "    This reverts commit ec614976e1665b40134d2c01921f9b0fbf89d1e2.\n", "\n", "diff --git a/all\\_checks.py b/all\\_checks.py\n", "\n", "index 21da366..fdc4476 100755\n", "\n", "\\--- a/all\\_checks.py\n", "\n", "+++ b/all\\_checks.py\n", "\n", "@@ -12,10 +12,6 @@ def main():\n", "\n", "         print(\"Pending Reboot.\")\n", "\n", "         sys.exit(1)\n", "\n", "\\-    if disk\\_full():\n", "\n", "\\-        print(\"Disk Full.\")\n", "\n", "\\-        sys.exit(1)\n", "\n", "\\-\n", "\n", "     print(\"Everything ok.\")\n", "\n", "     sys.exit(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Identifying a Commit\n", "\n", "This reading contains the code used in the instructional videos from [**Identifying a commit**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/WqddF/identifying-a-commit)**.** \n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd checks\n", "\n", "git log \\-1\n", "```\n", "\n", "**Code output:**\n", "\n", "commit abb063210c1f011b0d6470a4c5f1d8f672edd3ef (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 22:20:45 2019 +0200\n", "\n", "    Add a gitignore file, ignoring .DS\\_STORE files\n", "\n", "```bash\n", "git log \\-2\n", "```\n", "\n", "**Code output:**\n", "\n", "commit abb063210c1f011b0d6470a4c5f1d8f672edd3ef (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 22:20:45 2019 +0200\n", "\n", "    Add a gitignore file, ignoring .DS\\_STORE files\n", "\n", "commit 7d7167b2db44abf8cf014230f9b9708786e41c2a\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 21:52:59 2019 +0200\n", "\n", "    New name for disk\\_usage.py\n", "\n", "```bash\n", "git show 30e70712882267ca2dd749acfa02ea3aacfd0b24\n", "```\n", "\n", "**Code output:**\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 21:52:59 2019 +0200\n", "\n", "    New name for disk\\_usage.py\n", "\n", "diff --git a/disk\\_usage.py b/check\\_free\\_space.py\n", "\n", "similarity index 100%\n", "\n", "rename from disk\\_usage.py\n", "\n", "rename to check\\_free\\_space.py\n", "\n", "```bash\n", "git show 30\n", "```\n", "\n", "**Code output:**\n", "\n", "fatal: ambiguous argument '7d': unknown revision or path not in the working tree.\n", "\n", "Use '--' to separate paths from revisions, like this:\n", "\n", "'git \\[...\\] -- \\[...\\]'\n", "\n", "```bash\n", "git show 30e7\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 7d7167b2db44abf8cf014230f9b9708786e41c2a\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 21:52:59 2019 +0200\n", "\n", "    New name for disk\\_usage.py\n", "\n", "diff --git a/disk\\_usage.py b/check\\_free\\_space.py\n", "\n", "similarity index 100%\n", "\n", "rename from disk\\_usage.py\n", "\n", "rename to check\\_free\\_space.py\n", "\n", "```bash\n", "git revert 30e7\n", "```\n", "\n", "**Code output:**\n", "\n", "Revert \"New name for disk\\_usage.py\"\n", "\n", "Rollback reason: the previous name was actually better.\n", "\n", "This reverts commit 7d7167b2db44abf8cf014230f9b9708786e41c2a.\n", "\n", "\\# Please enter the commit message for your changes. Lines starting\n", "\n", "\\# with '#' will be ignored, and an empty message aborts the commit.\n", "\n", "\\# On branch master\n", "\n", "\\# Changes to be committed:\n", "\n", "\\#       renamed:    check\\_free\\_space.py -> disk\\_usage.py\n", "\n", "```bash\n", "git revert 7d71\n", "```\n", "\n", "**Code output:**\n", "\n", "\\[master 80b2dac\\] Revert \"New name for disk\\_usage.py\"\n", "\n", " 1 file changed, 0 insertions(+), 0 deletions(-)\n", "\n", " rename check\\_free\\_space.py => disk\\_usage.py (100%)\n", "\n", "```bash\n", "git show 7d1de19\n", "```\n", "\n", "**Code output:**\n", "\n", "commit 80b2dacef4b567196e61651064f03089c5e70b5e (HEAD -> master)\n", "\n", "Author: My name \n", "\n", "Date:   Wed Jul 17 00:02:39 2019 +0200\n", "\n", "    Revert \"New name for disk\\_usage.py\"\n", "\n", "    Rollback reason: the previous name was actually better.\n", "\n", "    This reverts commit 7d7167b2db44abf8cf014230f9b9708786e41c2a.\n", "\n", "diff --git a/check\\_free\\_space.py b/disk\\_usage.py\n", "\n", "similarity index 100%\n", "\n", "rename from check\\_free\\_space.py\n", "\n", "rename to disk\\_usage.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Study guide: Git Revert\n", "\n", "When writing and committing code, making mistakes is a common occurrence. Thankfully, there are multiple ways for you to revert or undo your mistakes. Take a look at the helpful commands below.\n", "\n", "[git checkoutOpens in a new tab](https://git-scm.com/docs/git-checkout) is used to switch branches. For example, you might want to pull from your main branch. In this case, you would use the command git checkout main. This will switch to your main branch, allowing you to pull. Then you could switch to another branch by using the command  git checkout .\n", "\n", "[git resetOpens in a new tab](https://git-scm.com/docs/git-reset#_examples)  can be somewhat difficult to understand. Say you have just used the command git add. to stage all of your changes, but then you decide that you are not ready to stage those files. You could use the command git reset to undo the staging of your files.\n", "\n", "There are some other useful articles online, which discuss more aggressive approaches to [resetting the repoOpens in a new tab](https://jwiegley.github.io/git-from-the-bottom-up/3-Reset/4-doing-a-hard-reset.html) (Git repository). As discussed in this article, doing a hard reset can be extremely dangerous. With a hard reset, you run the risk of losing your local changes. There are safer ways to achieve the same effect. For example, you could run git stash, which will temporarily shelve or stash your current changes. This way, your current changes are kept safe, and you can come back to them if needed.\n", "\n", "[git commit --amendOpens in a new tab](https://git-scm.com/docs/git-commit#Documentation/git-commit.txt---amend) is used to make changes to your most recent commit after-the-fact, which can be useful for making notes about or adding files to your most recent commit. Be aware that this git --amend command rewrites and replaces your previous commit, so it is best not to use this command on a published commit.\n", "\n", "[git revertOpens in a new tab](https://git-scm.com/docs/git-revert) makes a new commit which effectively rolls back a previous commit. Unlike the git reset command which rewrites your commit history, the git revert command creates a new commit which undoes the changes in a specific commit. Therefore, a revert command is generally safer than a reset command.\n", "\n", "For more information on these and other methods to undo something in Git, checkout this [Git Basics - Undoing ThingsOpens in a new tab](https://git-scm.com/book/en/v2/Git-Basics-Undoing-Things) article.\n", "\n", "Additionally, there are some interesting considerations about how git object data is stored, such as the usage of SHA-1.\n", "\n", "SHA-1 is what’s known as a *hash function*, a cryptographic function that generates a digital fingerprint of a file. Theoretically, it’s impossible for two different files to have the same SHA-1 hash, which means that SHA-1 can be used for two things:\n", "\n", "- Confirming that the contents of a file have not changed (digital signature).\n", "- Serving as an identifier for the file itself (a token or fingerprint).\n", "\n", "Git calculates a hash for every commit. Those hashes are displayed by commands like git log or in various pages on Github. For commands like git revert, you can then use the hash to refer to a specific commit.\n", "\n", "Feel free to read more here:\n", "\n", "- [SHA-1 collision detection on GitHub.comOpens in a new tab](https://github.blog/2017-03-20-sha-1-collision-detection-on-github-com/)\n", "\n", "Even the most accomplished developers make mistakes in Git. It happens to everyone, so don’t stress about it. You have these and other methods to help you revert or undo your mistakes." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Creating new branches\n", "\n", "This reading contains the code used in the instructional videos from [**Creating new branches**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/FAmM2/creating-new-branches)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd checks/\n", "\n", "git branch\n", "```\n", "\n", "**Code output:**\n", "\n", "\\* master\n", "\n", "```bash\n", "git branch new\\-feature\n", "\n", "git branch\n", "```\n", "\n", "**Code output:**\n", "\n", "\\* master\n", "\n", "  New-feature\n", "\n", "```bash\n", "git checkout new\\-feature\n", "```\n", "\n", "**Code output:**\n", "\n", "Switched to branch 'new-feature'\n", "\n", "```bash\n", "git checkout \\-b even\\-better-feature\n", "```\n", "\n", "**Code output:**\n", "\n", "Switched to a new branch 'even-better-feature'\n", "\n", "```bash\n", "atom free\\_memory.py \n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Working with branches\n", "\n", "This reading contains the code used in the instructional videos from [**Working with branches**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/UHBEa/working-with-branches)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "cd checks\n", "\n", "git status\n", "```\n", "\n", "**Code output:**\n", "\n", "On branch even-better-feature\n", "\n", "nothing to commit, working tree clean\n", "\n", "```bash\n", "ls \\-l\n", "```\n", "\n", "**Code output:**\n", "\n", "total 8\n", "\n", "\\-rw-rw-r-- 1 user user 659 Jul 17 00:02 disk\\_usage.py\n", "\n", "\\-rw-rw-r-- 1 user user  53 Jul 17 15:33 free\\_memory.py\n", "\n", "```bash\n", "git checkout master\n", "\n", "git log \\-2\n", "```\n", "\n", "**Code output:**\n", "\n", "Switched to branch 'master'\n", "\n", "user@ubuntu:~/checks$ git log -2\n", "\n", "commit 80b2dacef4b567196e61651064f03089c5e70b5e (HEAD -> master, new-feature)\n", "\n", "Author: My name \n", "\n", "Date:   Wed Jul 17 00:02:39 2019 +0200\n", "\n", "    Revert \"New name for disk\\_usage.py\"\n", "\n", "    Rollback reason: the previous name was actually better.\n", "\n", "    This reverts commit 7d7167b2db44abf8cf014230f9b9708786e41c2a.\n", "\n", "commit abb063210c1f011b0d6470a4c5f1d8f672edd3ef\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jul 15 22:20:45 2019 +0200\n", "\n", "    Add a gitignore file, ignoring .DS\\_STORE files\n", "\n", "```bash\n", "ls \\-l\n", "```\n", "\n", "**Code output:**\n", "\n", "total 4\n", "\n", "\\-rw-rw-r-- 1 user user 659 Jul 17 00:02 disk\\_usage.py\n", "\n", "```bash\n", "git branch\n", "```\n", "\n", "**Code output:**\n", "\n", "  even-better-feature\n", "\n", "\\* master\n", "\n", "  new-feature\n", "\n", "```bash\n", "git branch \\-d new\\-feature \n", "```\n", "\n", "**Code output:**\n", "\n", "Deleted branch new-feature (was 80b2dac).\n", "\n", "```bash\n", "git branch\n", "```\n", "\n", "**Code output:**\n", "\n", "  even-better-feature\n", "\n", "\\* master\n", "\n", "```bash\n", "git branch \\-d even\\-better-feature \n", "```\n", "\n", "**Code output:**\n", "\n", "error: The branch 'even-better-feature' is not fully merged.\n", "\n", "If you are sure you want to delete it, run 'git branch -D even-better-feature'." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Merging\n", "\n", "This reading contains the code used in the instructional videos from [**Merging**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/InLJQ/merging)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course. \n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "git branch\n", "```\n", "\n", "**Code output:** \n", "\n", "   Even-better-feature\n", "\n", "\\* master\n", "\n", "```bash\n", "git merge even\\-better-feature \n", "```\n", "\n", "**Code output:** \n", "\n", "Updating 7d1de19..4361880\n", "\n", "Fast-forward\n", "\n", "  free-memory.py | 6 ++++++\n", "\n", "  1 file changed, 6 insertions (+)\n", "\n", "  Create mode 100644 free\\_memory.py\n", "\n", "```bash\n", "git log\n", "```\n", "\n", "**Code output:** \n", "\n", "Switched to branch 'master'\n", "\n", "commit 436188012f633b773eb6034fc02051e34da05134 (HEAD -> master, even-better-feature)\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jan 6 09:47:07 2020 -0800 \n", "\n", "     Add an empty free\\_memory.py\n", "\n", "commit 7d7167b2db44abf8cf014230f9b9708786e41c2a\n", "\n", "Author: My name \n", "\n", "Date:   Mon Jan 6 09:15:58 2020 -0800 \n", "\n", "    Revert \"New name for disk\\_usage.py\"\n", "\n", "    Rollback reason: the previous name was actually better :)\n", "\n", "    This reverts commit 7d7167b2db44abf8cf014230f9b9708786e41c2a.\n", "\n", "(...)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Merge conflicts\n", "\n", "This reading contains the code used in the instructional videos from [**Merge Conflicts**Opens in a new tab](https://www.coursera.org/learn/introduction-git-github/lecture/96VdS/merge-conflicts)\n", "\n", "## Introduction\n", "\n", "This follow-along reading is organized to match the content in the video that follows. It contains the same code shown in the next video. These code blocks will provide you with the opportunity to see how the code is written and can be used as a reference as you work through the course.\n", "\n", "You can follow along in the reading as the instructor discusses the code or review the code after watching the video.\n", "\n", "```bash\n", "atom free\\_memory.py\n", "\n", "#!/usr/bin/env python3\n", "\n", "def main():\n", "\n", "    \"\"\"Checks if there's enough free memory in the computer.\"\"\"\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "git commit \\-a \\-m 'Add comment to main()'\n", "```\n", "\n", "**Code output:** \n", "\n", "\\[master fe2fc5b\\] Add comment to main()\n", "\n", "  1 file changed, 2 insertions(+), 2 deletions(-)\n", "\n", "```bash\n", "git checkout even\\-better-feature \n", "```\n", "\n", "**Code output:**\n", "\n", "Switched to branch 'even-better-feature'\n", "\n", "```bash\n", "atom free\\_memory.py \n", "\n", "#!/usr/bin/env python3\n", "\n", "def main():\n", "\n", "    print(\"Everything ok.\")\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "git commit \\-a \\-m 'Print everything ok'\n", "```\n", "\n", "**Code output:** \n", "\n", "\\[even-better-feature 6a6de99\\] Print everything ok\n", "\n", "1 file changed, 2 insertions(+), 2 deletions(-)\n", "\n", "```bash\n", "git checkout master\n", "```\n", "\n", "**Code output:** \n", "\n", "Switched to branch 'master'\n", "\n", "```bash\n", "git merge even\\-better-feature \n", "```\n", "\n", "**Code output:** \n", "\n", "Auto-merging free\\_memory.py\n", "\n", "CONFLICT (content): Merge conflict in free\\_memory.py\n", "\n", "Automatic merge failed; fix conflicts and then commit the result.\n", "\n", "```bash\n", "git status\n", "```\n", "\n", "**Code output:** \n", "\n", "On branch master\n", "\n", "You have unmerged paths.\n", "\n", "  (fix conflicts and run \"git commit\")\n", "\n", "  (use \"git merge --abort\" to abort the merge)\n", "\n", "Unmerged paths:\n", "\n", "  (use \"git add ...\" to mark resolution)\n", "\n", "        both modified:   free\\_memory.py\n", "\n", "no changes added to commit (use \"git add\" and/or \"git commit -a\")\n", "\n", "```bash\n", "atom free\\_memory.py \n", "\n", "#!/usr/bin/env python3\n", "\n", "def main():\n", "\n", "<<<<<<< HEAD\n", "\n", "    \"\"\"Checks if there's enough free memory in the computer.\"\"\"\n", "\n", "\\=======\n", "\n", "    print(\"Everything ok.\")\n", "\n", "\\>>>>>>> even\\-better-feature\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "#!/usr/bin/env python3\n", "\n", "def main():\n", "\n", "    \"\"\"Checks if there's enough free memory in the computer.\"\"\"\n", "\n", "    print(\"Everything ok.\")\n", "\n", "main()\n", "```\n", "\n", "```bash\n", "git add free\\_memory.py\n", "\n", "git status\n", "```\n", "\n", "**Code output:** \n", "\n", "On branch master\n", "\n", "All conflicts fixed but you are still merging.\n", "\n", "  (use \"git commit\" to conclude merge)\n", "\n", "Changes to be committed:\n", "\n", "        modified:   free\\_memory.py\n", "\n", "```bash\n", "git commit\n", "```\n", "\n", "**Code output:** \n", "\n", "Merge branch 'even-better-feature'\n", "\n", "Kept lines from both branches\n", "\n", "\\# Conflicts:\n", "\n", "\\#       free\\_memory.py\n", "\n", "\\#\n", "\n", "\\# It looks like you may be committing a merge.\n", "\n", "\\# If this is not correct, please remove the file\n", "\n", "\\#       .git/MERGE\\_HEAD\n", "\n", "\\# and try again.\n", "\n", "\\# Please enter the commit message for your changes. Lines starting\n", "\n", "\\# with '#' will be ignored, and an empty message aborts the commit.\n", "\n", "\\#\n", "\n", "\\# On branch master\n", "\n", "\\# All conflicts fixed but you are still merging.\n", "\n", "\\#\n", "\n", "\\# Changes to be committed:\n", "\n", "\\#       modified:   free\\_memory.py\n", "\n", "```bash\n", "git log \\--graph \\--oneline\n", "```\n", "\n", "**Code output:** \n", "\n", "\\*   8cb5e62 (HEAD -> master) Merge branch 'even-better-feature'\n", "\n", "|\\\\  \n", "\n", "| \\* ca6de99 (even-better-feature) Print everything ok\n", "\n", "\\* | fe2fc5b Add comment to main()\n", "\n", "|/  \n", "\n", "\\* 4361880 Add an empty free\\_memory.py\n", "\n", "\\* 7d1de19 Revert \"New name for disk\\_usage.py\"\n", "\n", "\\* bb9bd78 Add a gitignore file, ignoring .DS\\_STORE files\n", "\n", "\\* 30e7071 New name for disk\\_usage.py\n", "\n", "\\* 0d5a271 Delete unneeded processes file\n", "\n", "\\* 5aada26 Adding file to delete it later\n", "\n", "\\* cfb2b8e Add periods to the end of sentences.\n", "\n", "\\* 21e6a1a Add new disk\\_usage check." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Study guide: Git branches and merging\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Glossary terms from module 2\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Exemplar: Merging Branches in Git\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# \n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "name": "python", "version": "3.13.2" } }, "nbformat": 4, "nbformat_minor": 2 }