祖先引用是一種指明乙個提交的方式。 如果你在引用的尾部加上乙個^
, git 會將其解析為該引用的上乙個提交。 假設你的提交歷史是:
$ 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
$ git show head^
commit d921970aadf03b3cf0e71becdaab3147ba71cdef
merge: 1c002dd... 35cfb2b...
author: scott chacon
date: thu dec 11 15:08:43 2008 -0800
merge commit 'phedders/rdocs'
你也可以在^
後面新增乙個數字——例如d921970^2
代表 「d921970 的第二父提交」。這個語法只適用於合併(merge)的提交,因為合併提交會有多個父提交。 第一父提交是你合併時所在分支,而第二父提交是你所合併的分支:
$ git show d921970^
commit 1c002dd4b536e7479fe34593e72e6c6c1819e53b
author: scott chacon
date: thu dec 11 14:58:32 2008 -0800
added some blame and merge stuff
$ git show d921970^2
commit 35cfb2b795a55793d7cc56a6cc2060b4bb732548
author: paul hedderly
date: wed dec 10 22:22:03 2008 +0000
some rdoc changes
另一種指明祖先提交的方法是~
。 同樣是指向第一父提交,因此head~
和head^
是等價的。 而區別在於你在後面加數字的時候。head~2
代表 「第一父提交的第一父提交」,也就是 「祖父提交」 —— git 會根據你指定的次數獲取對應的第一父提交。 例如,在之前的列出的提交歷史中,head~3
就是
$ git show head~3
commit 1c3618887afb5fbcbea25b7c013f4e2114448b8d
author: tom preston-werner
date: fri nov 7 13:47:59 2008 -0500
ignore *.gem
也可以寫成head^^^
,也是第一父提交的第一父提交的第一父提交:
$ git show head^^^
commit 1c3618887afb5fbcbea25b7c013f4e2114448b8d
author: tom preston-werner
date: fri nov 7 13:47:59 2008 -0500
ignore *.gem
你也可以組合使用這兩個語法 —— 你可以通過head~3^2
來取得之前引用的第二父提交(假設它是乙個合併提交)。 深入理解 引用
引用簡介 引用就是某一變數 目標 的乙個別名,對引用的操作和對變數直接操作完全相同。引用的宣告方法 型別識別符號 引用名 目標變數名 例1 int a int ra a 定義引用ra,他是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 宣告...
深入理解Git原理 移除檔案
如果是在檔案還未納入 git 的管理時就不想跟蹤該檔案,可以在.gitignore檔案中加入該檔案的模式。如果檔案已經納入 git 的管理,此時要從 git 中移除某個檔案,就必須要從已跟蹤檔案清單中移除 確切地說,是從暫存區域移除 然後提交。可以用git rm命令完成此項工作,並連帶從工作目錄中刪...
深入理解Git原理 附註標籤
git 使用兩種主要型別的標籤 輕量標籤與附註標籤。通常我們使用的是輕量標籤,乙個輕量標籤很像乙個不會改變的分支,它只是乙個特定提交的引用,本質上是將提交校驗和儲存到乙個檔案中,沒有儲存任何其他資訊。建立輕量標籤,只需要提供標籤名字 git tag v1.4 git tag v0.1 v1.0 v1...