我有一些奇怪的情况,并没有找不到它。
当我使用git log -p -<n>
时,我看不到文件中存在的更改,但如果我尝试git diff <prev>..<next> <file>
存在差异并显示。为什么会这样?
Git diff返回blob编号index cd785c4..967453b 100644
,我可以用它做什么?
这些信息对我有帮助吗?
答案 0 :(得分:2)
当我使用
git log -p -<n>
时,我看不到文件中存在的更改,但如果我尝试git diff <prev>..<next> <file>
存在差异并显示。为什么会这样?
这意味着有问题的提交是合并提交,即具有至少两个父ID的提交。当git log -p
或git 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
会接收更改,但结果README
与develop
中的版本完全匹配。< / p>
如果您现在git show
合并提交(或它出现在git log -p
),则组合差异将合并中的README
与{{1}进行比较在第一个父级(它不同,它有&#34;现在支持&#34; README
之前没有的文本),然后比较{em>第二个父级中与develop
合并的README
。第二次比较显示没有变化,因为合并选择了README
版本,因此合并差异省略了文件feature
。
当您找到合并的第一个父ID时,即合并前README
提示的提交,以及提交合并提交的develop
,您将获得常规(非组合的差异,并且由于git diff
获得了变化,你会看到变化。
请注意,您可以使用README
选项来说明显示合并的内容(例如-m
和git log
),以针对每个父级显示一个差异,而不是单个组合差异。 (对于典型的双父合并,这显示了针对一次提交的两个差异。在内部,这些命令生成一个假的额外提交来执行此操作。您不应该知道仅内部的伪提交,但它在一些泄漏的情况。)
Git diff返回blob编号
git show
,我可以用它做什么?
请参阅this answer。