另一种指明某次提交的常用方法是通过它的祖先。如果你在引用最后加上一个 ^,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