Git 祖先引用

另一种指明某次提交的常用方法是通过它的祖先。如果你在引用最后加上一个 ^,Git 将其理解为此次提交的父提交。 假设你的工程历史是这样的:

[code]$ git log --pretty=format:‘%h %s’ --graph

  • 734713b fixed refs handling, added gc auto, updated tests
  • d921970 Merge commit ‘phedders/rdocs’
    |
    | * 35cfb2b Some rdoc changes
  • | 1c002dd added some blame and merge stuff
    |/
  • 1c36188 ignore *.gem
  • 9b29157 add open3_detach to gemspec file list[/code]

那么,想看上一次提交,你可以使用 HEAD^,意思是“HEAD 的父提交”:

[code]$ git show HEAD^
commit d921970aadf03b3cf0e71becdaab3147ba71cdef
Merge: 1c002dd… 35cfb2b…
Author: Scott Chacon [email protected]
Date: Thu Dec 11 15:08:43 2008 -0800

Merge commit 'phedders/rdocs'[/code]

你也可以在 ^ 后添加一个数字——例如,d921970^2 意思是“d921970 的第二父提交”。这种语法只在合并提交时有用,因为合并提交可能有多个父提交。第一父提交是你合并时所在分支,而第二父提交是你所合并的分支:

[code]$ git show d921970^
commit 1c002dd4b536e7479fe34593e72e6c6c1819e53b
Author: Scott Chacon [email protected]
Date: Thu Dec 11 14:58:32 2008 -0800

added some blame and merge stuff

$ git show d921970^2
commit 35cfb2b795a55793d7cc56a6cc2060b4bb732548
Author: Paul Hedderly [email protected]
Date: Wed Dec 10 22:22:03 2008 +0000

Some rdoc changes[/code]

另外一个指明祖先提交的方法是 ~。这也是指向第一父提交,所以 HEAD~ 和 HEAD^ 是等价的。当你指定数字的时候就明显不一样了。HEAD~2 是指“第一父提交的第一父提交”,也就是“祖父提交”——它会根据你指定的次数检索第一父提交。例如,在上面列出的历史记录里面,HEAD~3 会是

[code]$ git show HEAD~3
commit 1c3618887afb5fbcbea25b7c013f4e2114448b8d
Author: Tom Preston-Werner [email protected]
Date: Fri Nov 7 13:47:59 2008 -0500

ignore *.gem[/code]

也可以写成 HEAD^^^,同样是第一父提交的第一父提交的第一父提交:

[code]$ git show HEAD^^^
commit 1c3618887afb5fbcbea25b7c013f4e2114448b8d
Author: Tom Preston-Werner [email protected]
Date: Fri Nov 7 13:47:59 2008 -0500

ignore *.gem[/code]

你也可以混合使用这些语法——你可以通过 HEAD~3^2 指明先前引用的第二父提交(假设它是一个合并提交)。

REF:http://cwiki.ossez.com/pages/viewpage.action?pageId=7045532