假设我从一个带有两个提交的简单git存储库开始:
A --> B
然后我执行存储库的交互式rebase,修改B,并在A和B之间添加提交.C是新提交,D是B的修改。
A --> C --> D
B和D的提交消息与提交的代码不同。
是否可以确定D是否来自B?基本上,给定D的哈希ID,是否可以获得B?
的哈希ID我怀疑答案会使用reflog,可能是git log -g
,但我还是无法将重新提交的提交映射到原始提交。
如果默认情况下无法做到这一点,是否可以通过配置更改获取信息?
似乎可以通过post-rewrite
挂钩获取此信息,但是,这只有在您预计需要此信息时才有效。
答案 0 :(得分:2)
是否可以确定D是否来自B?基本上,给定D的哈希ID,是否可以获得B?
的哈希ID
不,或者更确切地说,不是直接:
我怀疑答案会使用reflog ......
reflog包含您执行rebase的信息以及B
的原始SHA-1,但不包含在执行rebase的过程中拆分提交的事实。您可以启发式地确定这一点(通过扫描reflog,比较ID之前和之后,并从HEAD
和B
的reflog条目处理父ID-SHA-1:你将会发现之前和之后存在提交A
,B
之前存在但之后不存在,之后存在C
和D
。提交B
本身保留在存储库中,直到其reflog条目到期,因此您需要多长时间执行此类启发式扫描。
您可能还会发现提交D
上的作者日期与提交B
上的作者日期相同(我完全不确定)。