所以给定一个LibGit2Sharp Branch
的实例,你如何计算最初创建它的提交?
答案 0 :(得分:4)
Branch
仅仅是描述git head
引用的对象。 head
是一个文本文件,主要位于.git/refs/heads
层次结构下。此文本文件包含此commit
当前指向的head
的哈希值。同样,Branch
带有Tip
属性,该属性指向Commit
。
使用git存储库并执行提交,重置,重新定位等操作时,head
文件会使用不同的哈希值进行更新,指向不同的提交。
head
不保留以前指向的提交。 Branch
。
使用git,在创建新分支时,会创建一个新的reflog。 Git负责添加第一个条目,其中包含一条消息,用于标识已创建分支的对象。
给定现有分支backup
$ cat .git/refs/heads/backup
7dec18258252769d99a4ec9c82225e47d58f958c
创建新分支将创建并提供其reflog
$ git branch new_branch_from_branch backup
$ git reflog new_branch_from_branch
7dec182 new_branch_from_branch@{0}: branch: Created from backup
当然,直接从提交
创建分支时也可以$ git branch new_branch_from_sha 191adce
$ git reflog new_branch_from_sha
191adce new_branch_from_sha@{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);
}
所以“好消息”,reflog可能包含你所追求的东西; - )
但是...
注意:截至今天,LibGit2Sharp在创建或删除分支时不会创建条目。但是,目前这是由 @dahlbyk
中的 Pull Request #499 来解决的。