我正在寻找一种方法来显示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
可能会对这样一个特定的用例提出太多要求。我可以解决上面链接的答案,但这只是更多的工作。
任何帮助表示感谢。
答案 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