在交互式rebase之后查找原始git commit hash

时间:2014-05-08 18:54:36

标签: git

假设我从一个带有两个提交的简单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挂钩获取此信息,但是,这只有在您预计需要此信息时才有效。

1 个答案:

答案 0 :(得分:2)

  

是否可以确定D是否来自B?基本上,给定D的哈希ID,是否可以获得B?

的哈希ID

不,或者更确切地说,不是直接:

  

我怀疑答案会使用reflog ......

reflog包含您执行rebase的信息以及B的原始SHA-1,但不包含在执行rebase的过程中拆分提交的事实。您可以启发式地确定这一点(通过扫描reflog,比较ID之前和之后,并从HEADB的reflog条目处理父ID-SHA-1:你将会发现之前和之后存在提交AB之前存在但之后不存在,之后存在CD。提交B本身保留在存储库中,直到其reflog条目到期,因此您需要多长时间执行此类启发式扫描。

您可能还会发现提交D上的作者日期与提交B上的作者日期相同(我完全不确定)。