深入理解Git原理 祖先引用

2021-09-11 04:59:36 字數 1993 閱讀 1389

祖先引用是一種指明乙個提交的方式。 如果你在引用的尾部加上乙個^, 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...