2010-10-01 6 views
2

我發現自己是指各種原因的根提交。我通常創建一個名爲firstroot,使其更容易的標籤,但我最近一直處理相當多的倉庫,甚至手動標記是已經非常乏味。有一個特殊的名字(如HEAD,FETCH_HEAD)根承諾在一個Git倉庫當前分支?

有沒有簡單的方法來引用根提交,類似於HEADFETCH_HEAD

+1

1.真的,爲了什麼? 2.並不總是這樣的事情,但你可以假裝你總是選擇第一個父母。 – 2010-10-01 02:03:58

+0

這些「各種原因」是什麼? – 2010-10-04 07:41:08

回答

2

我只看到標註的是第一次提交有關你作爲目前唯一的解決辦法。
這樣的話,你可以通過一個名爲好標籤,而不是尋求通過日誌的SHA1參考。

注:可能有多個「根」在一個Git回購承諾(即多次提交,沒有任何父母)
例如見this thread,與Jakub Narębski的回答是:

且不說你可以在git存儲庫中擁有多個根(多個提交但沒有父項)。
除了獨立的分支(如「man」,「html」或「todo」)通常被吸收或子樹合流其他項目的結果。
在 'master' 分支有5根或更多:加入了 'git-tools'(mailinfo/mailsplit),吸收gitweb,和子樹-合併gitkgit-gui

1

沒那麼容易,但你可以得到對應於HEAD(頭的父母的父母的父母的......父母,直到提交到達沒有父)使用的「根」的SHA

git rev-list --topo-order --reverse HEAD | head -n 1 

實際上適用於任何提交。如果有多條收斂歷史路徑,您將獲得提交數最多的路徑的根。

我不能說,我看不到任何任何使用它,雖然。大多數有理由將歷史深入歷史的東西已經知道如何。

+0

還要注意,git倉庫中可能有多個根(無父級)提交;上面的調用會找到其中一個。 – 2010-10-04 07:30:14

3

要找到SHA-1的標識符所有根提交的git倉庫(與任何本地分行開始),可以使用下面的命令:

 
$ git rev-list --parents --all | 
    grep -v ' ' 

然後可以使用git show檢查他們。


說明:git rev-list選項--parents使得打印空格分隔提交的所有家長清單(格式爲 「提交父...」)。因此,如果提交具有任何父項,則git rev-list調用中的行至少包含一個空格,將提交標識與其父ID相分離。

選項--all意味着git rev-list作品彷彿在refs/所有裁判都在命令行中列爲< 提交 >。