提交之间存在差异,但git log不显示更改

时间:2016-03-22 15:48:30

标签: git

我有一些奇怪的情况,并没有找不到它。

当我使用git log -p -<n>时,我看不到文件中存在的更改,但如果我尝试git diff <prev>..<next> <file>存在差异并显示。为什么会这样?

Git diff返回blob编号index cd785c4..967453b 100644,我可以用它做什么?

这些信息对我有帮助吗?

1 个答案:

答案 0 :(得分:2)

  

当我使用git log -p -<n>时,我看不到文件中存在的更改,但如果我尝试git diff <prev>..<next> <file>存在差异并显示。为什么会这样?

这意味着有问题的提交是合并提交,即具有至少两个父ID的提交。当git log -pgit show显示合并时,其默认设置是使用git&#39> 组合差异格式。

组合差异的确切细节位于the documentation部分下的combined diff format,但我会引用"diff format for merges" section

  

请注意,组合差异仅列出从所有父母修改的文件。

(粗体我的)。例如,假设您将分支feature合并到分支develop中,而develop中的文件README合并为:

There will be a feature X soon.

假设在feature中,README说:

Feature X is now supported.

feature合并到develop时,文件README会接收更改,但结果READMEdevelop中的版本完全匹配。< / p>

如果您现在git show合并提交(或它出现在git log -p),则组合差异将合并中的README与{{1}进行比较在第一个父级(它不同,它有&#34;现在支持&#34; README之前没有的文本),然后比较{em>第二个父级中与develop合并的README。第二次比较显示没有变化,因为合并选择了README版本,因此合并差异省略了文件feature

当您找到合并的第一个父ID时,即合并前README提示的提交,以及提交合并提交的develop,您将获得常规(非组合的差异,并且由于git diff获得了变化,你会看到变化。

请注意,您可以使用README选项来说明显示合并的内容(例如-mgit log),以针对每个父级显示一个差异,而不是单个组合差异。 (对于典型的双父合并,这显示了针对一次提交的两个差异。在内部,这些命令生成一个假的额外提交来执行此操作。您不应该知道仅内部的伪提交,但它在一些泄漏的情况。)

  

Git diff返回blob编号git show,我可以用它做什么?

请参阅this answer