$ git reset --hard HEAD^ # discard last commit
$ git rebase --interactive HEAD~5 # rebase last 4 commits
A suffix ^
to a revision parameter means the first parent of that commit object. ^<n>
means the <n>-th parent (i.e. <rev>^
is equivalent to <rev>^1
).
A suffix ~<n>
to a revision parameter means the commit object that is the <n>-th generation ancestor of the named commit object, following only the first parents. This means that for example <rev>~3
is equivalent to <rev>^^^
. As a shortcut, <rev>~
means <rev>~1
, and is equivalent to <rev>^1
, or <rev>^
in short.
This syntax is composable.
To find such symbolic names you can use the git name-rev
command:
$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940
Note that --pretty=oneline
and not --oneline
must be used in the following example
$ git log --pretty=oneline | git name-rev --stdin --name-only
master Sixth batch of topics for 2.10
master~1 Merge branch 'ls/p4-tmp-refs'
master~2 Merge branch 'js/am-call-theirs-theirs-in-fallback-3way'
[...]
master~14^2 sideband.c: small optimization of strbuf usage
master~16^2 connect: read $GIT_SSH_COMMAND from config file
[...]
master~22^2~1 t7810-grep.sh: fix a whitespace inconsistency
master~22^2~2 t7810-grep.sh: fix duplicated test name