承诺祖先连锁革命等

$ git reset --hard HEAD^             # discard last commit
$ git rebase --interactive HEAD~5    # rebase last 4 commits

后缀^到 revision 参数表示该提交对象的第一个父对象。^<n> 表示第 n 个父母(即 <rev>^相当于 <rev>^1)。

后缀~<n> 到版本参数意味着提交对象是指定提交对象的第 n 代生成祖先,仅跟随第一个父对象。这意味着例如 <rev>~3 相当于 <rev>^^^。作为捷径,<rev>~意为 <rev>~1,相当于 <rev>^1,或简称 <rev>^

此语法是可组合的。

要查找此类符号名称,你可以使用 git name-rev 命令:

$ git name-rev 33db5f4d9027a10e477ccf054b2c1ab94f74c85a
33db5f4d9027a10e477ccf054b2c1ab94f74c85a tags/v0.99~940

请注意,必须在以下示例中使用 --pretty=oneline 而不是 --oneline

$ 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