Git Workshop
POSTS

Alice: moving through the timeline

Note: this section of the course requires root access to install a tool. If it is not possible for you to get elevated privileges, just check if delta is already present in the system.

Lab

  • Alice decides that a more fancy diff tool would provide better feedback, so she configures the delta diff tool:
wget -P /tmp https://github.com/dandavison/delta/releases/download/0.15.1/git-delta_0.15.1_amd64.deb
sudo dpkg -i /tmp/git-delta_0.15.1_amd64.deb
delta --version
  • Now she needs to instruct git to make use of the new tool, by altering the configuration:
git config core.pager delta
git config interactive.diffFilter "delta --color-only"
git config delta.navigate true
git config delta.light false  # or true!
git config delta.side-by-side true
git config delta.line-numbers true
git config merge.conflictstyle diff3
git config diff.colorMoved default
Now it is possible to compare again the working area version of the chapter with the first one, getting a more visual output:
git diff HEAD█:chapter-01.md chapter-01.md

Solution

git diff HEAD~:chapter-01.md chapter-01.md

After comparing the two version, Alice thinks that maybe it would be more interesting to leave the description of Tim to the imagination of the reader, so he goes back in time to the previous revision

  • She checks the current state of the working area and the value of the HEAD reference
cat chapter-01.md
cat .git/HEAD
cat .git/refs/heads/main
And she compares it with the previous state, getting the SHA-1 of the first revision and using it to retrieve the original version of the chapter
git rev-parse HEAD~
PREV_REVISION=$(git rev-parse HEAD~)
git c███████ $PREV_REVISION  # Move the value of the HEAD ref

Solution

git rev-parse HEAD~
PREV_REVISION=$(git rev-parse HEAD~)
git checkout $PREV_REVISION

  • Wait… what does it means with detached HEAD state? Alice compares the current HEAD value with the one stored in main, to check how the first one is not pointing to the second anymore
cat .git/HEAD                  # Detached!
cat .git/refs/heads/main       # main is in the future
In any case, the repo has traveled back in time as it shows the command to show the history of the changes, and the new content of the file:
git ███
cat chapter-01.md

Solution

git log
cat chapter-01.md

Nah, Alice decides that it was not a good idea: Tim has to have a particular appearance for this story to work. So Alice reverses the time traveling moving *HEAD* to the end of the line, but just for the fun she will not use the `checkout` command to do it, but an equivalent:
git sw████ -
git log
cat chapter-01.md
cat .git/HEAD

Solution

git switch -
git log
cat chapter-01.md
cat .git/HEAD

Questions

  • What are the two main commands used to manipulate the position of the HEAD reference?

    Quick access

    1. Introduction
    2. Alice: repo initialization
    3. Alice: first commits
    4. Alice: moving through the timeline
    5. Alice: basic branching
    6. Alice: merging without conflicts
    7. Alice: merging with conflict resolution
    8. Alice: tagging
    9. Bob: cloning repositories
    10. Bob: pushing to origin
    11. Alice: merging and log format
    12. Alice: centralized repository creation
    13. Bob: pulling
    14. Bob: recovering from errors with the reference log
    15. Bob finds the author of a typo
    16. Alice: amending commits
    17. Alice: history simplification
    18. Alice: cherry picking changesets
    © Git Workshop 2023