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?
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.
To simply answer the question from title (since that's what got me here from Google):
To checkout the previous commit:
git checkout HEAD^
To checkout the next commit (assuming there's no branching):
git checkout `git log --reverse --ancestry-path HEAD..master | head -n 1 | cut -d \ -f 2`
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 generation
Both default to one.
来源:https://stackoverflow.com/questions/16062358/referring-to-the-previous-next-commit-in-git