在git log中显示合并的冲突差异部分的摘要

时间:2018-02-02 11:08:48

标签: git merge merge-conflict-resolution

我正在寻找一种方法来显示git日志中合并提交的冲突部分,最好是与我得到的历史记录中的所有其他(非合并)差异一起显示 git log --numstat。有一个类似于我的问题已经回答:Show conflict diff part of a merge。我可以修改一个答案

git diff hash hash^1 hash^2 --numstat

但这只允许我在当时显示一个提交的差异而不是嵌入在历史记录中。最后,我想从日志中重建每个文件中的行数(插入的累积总和 - 删除),只要没有合并冲突,现在就可以正常工作。

如果我使用完整的差异进行合并(例如使用git log --numstat -m),我不会将diff传递给直接父级,而是包含一些差异,这些更改已在早期的非合并提交中报告,这弄乱了我对插入/删除的计算。

我知道git log可能会对这样一个特定的用例提出太多要求。我可以解决上面链接的答案,但这只是更多的工作。

任何帮助表示感谢。

1 个答案:

答案 0 :(得分:1)

  

最终,我想从日志中重建每个文件中的行数(插入的累积总和 - 删除),只要没有合并冲突,现在就可以正常工作。

如果我理解正确的目标是找到某个提交的所有文件的行数,那么有一种方法根本不需要重建:

git diff-tree --numstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904..$COMMIT

$COMMIT将是所需的提交哈希。

这使用diff-tree将空树与所需提交的树进行比较,并生成直接汇总的统计信息。

这也可以放入循环中以获取完整历史记录中所有文件的行数:

$ for COMMIT in $(git rev-list master)
do
    git diff-tree --numstat 4b825dc642cb6eb9a060e54bf8d69288fbee4904..$COMMIT
done

它也可以使用通常的-- file1.txt file2.txt ...后缀限制为特定文件。

作为参考,空树哈希是将空字符串作为树对象进行哈希处理时得到的:

$ echo -n | git hash-object -t tree --stdin
4b825dc642cb6eb9a060e54bf8d69288fbee4904