I have seen git commands use a syntax such as HEAD~
, but I haven't been able to find this syntax in the Git Reference Manual.
Here is what I have understood: <commit>~<n>
refers to the commit <n> steps earlier than <commit> (where <n> is an integer number), and commit~
simply means the same and that <n> implicitly is one.
Now, is this correct? In that case, does this always work? What if <commit> is the result of a merge between two branches, which commit will then <commit>~
refer to? Is there some corresponding syntax for referring to the next commit or the commit <n> steps later?
To simply answer the question from title (since that's what got me here from Google):
To checkout the previous commit:
To checkout the next commit (assuming there's no branching):
You have a very clear explanation of how this works in the chapter on Acenstry References in Pro Git:
~
is used to get the first parent.^
can be used to get the other parents (^2
, for example, for a merge).But you don't have a simple way to reference the next commit, even if there are more convoluted ways to get it.
Inspired by @cexbrayat's answer, I find it useful to think of it this way:
How to refer to something in a commit's ancestry, where a commit can have multiple parents:
^n
specifies which parent~n
specifies which generationBoth default to one.