HEAD # pointer to the commit object HEAD~1 # refers to the first parent of the commit object HEAD~ # same as HEAD~1 HEAD~2 # refers to first parent of the first parent (or the "grandparent") HEAD~~ # same as HEAD~2 HEAD~3 # refers to first parent of the "grandparent" HEAD~~~ # same as HEAD~3 # ...
To understand this better, consider for example, the following visualization:
--> latest commits this way --> HEAD | ... -> U -> V -> W -> X -> ...
In the example above, since
HEAD is pointing to "
X", the following would be true:
HEAD # points to "X" HEAD~ # refers to "W" (i.e. 1 commit older than HEAD) HEAD~2 # refers to "V" (i.e. 2 commits older than HEAD) HEAD~3 # refers to "U" (i.e. 3 commits older than HEAD) # ...
For a more practical example, let's consider the following git commit history:
commit 3ba53ff050ef253058088eff5 Author: Designcise Date: Thu Dec 9 17:39:20 2021 +0100 Updated tests commit 66db03591ccb5581edf0044dfe Author: Designcise Date: Thu Dec 2 17:53:47 2021 +0100 Refactoring & updated license commit 34bc04751b3b5581ed7de32cdb Author: Designcise Date: Mon Nov 15 03:00:30 2021 +0100 Added coverage badges to readme commit 76af06471c3a5281ff7fe38ce9 Author: Designcise Date: Sun Nov 14 12:34:42 2021 +0100 Updated author list in readme commit 45db03581b3b5581ed7cc44dbc Author: Designcise Date: Fri Nov 5 22:06:47 2021 +0100 Updated readme ...
If you were to, for example, run the
git checkout HEAD~3 command, then the
HEAD would move/point to the commit with the id "
Hope you found this post useful. It was published . Please show your love and support by sharing this post.