2013-08-29 49 views

回答

3

A Branch僅僅是描繪git head參考的對象。 A head是一個文本文件,主要生活在.git/refs/heads層次結構下。此文本文件包含當前指向的commit的散列值head。同樣,Branch承載Tip屬性,該屬性指向Commit

當使用git存儲庫並執行諸如提交,重置,重新綁定等操作... head文件使用不同的散列更新,指向不同的提交。

A head不跟蹤以前指出的提交。 Branch也沒有。

使用git,創建新分支時,會創建一個新的reflog。 Git負責添加第一個條目,並在其中標識已創建分支的對象。

鑑於現有的分支backup

$ cat .git/refs/heads/backup 
7dec18258252769d99a4ec9c82225e47d58f958c 

創建一個新的分支將創建並養活其引用日誌

$ git branch new_branch_from_branch backup 

$ git reflog new_branch_from_branch 
7dec182 [email protected]{0}: branch: Created from backup 

當然,當直接創建從一個分支,也適用承諾

$ git branch new_branch_from_sha 191adce 

$ git reflog new_branch_from_sha 
191adce [email protected]{0}: branch: Created from 191adce 

LibGit2Sharp也公開了reflog。例如,以下代碼將枚舉特定Branch的日誌條目。

var branch = repository.Head; // or repository.Branches["my_branch"]... 

foreach (ReflogEntry e in repository.Refs.Log(branch.CanonicalName)) 
{ 
    Console.WriteLine("{0} - {1} : {2}", 
     e.From.ToString(7), e.To.ToString(7), e.Message); 
} 

所以 「好消息」,引用日誌中可能包含你以後;-)

但是......

  • 你必須找出通過在每條消息中搜索「分支:創建自」模式
  • 如果您的分支太舊,則refl中的較舊條目OG可能已被刪除內置git gc管理過程(默認情況下引用日誌條目保留90天)進入現在可以丟失「從創建」,初始

注:截至今天,在創建或刪除分支時,LibGit2Sharp不會創建創建條目。然而,這是目前由驚人@dahlbyk解決爲Pull Request #499

+0

部分我有同樣的問題,因爲OP,跟着你的指引,但我注意到,在我的回購,點在哪裏引用日誌停止分支該分支是創建的(例如,它沒有顯示歷史),它的'From'值爲0.我在這裏丟失了什麼?這似乎是一種更簡潔的方式來檢測分支生命的開始,而不是搜索單個提交文本。 –