Git log输出中部分提交缺失--shortstat详情的原因排查
问题
执行git log查询不同作者的提交时发现:一位作者的合并提交在GitHub网页端能看到文件变更统计,但用--shortstat参数输出时,部分合并提交缺失了类似12 files changed, 328 insertions(+), 16 deletions(-)的变更详情。想确认这是Git的bug还是操作失误,以及具体原因。
执行的命令及输出如下:
针对user name 2的命令:
$ git log --all --pretty="%cn - %cr - %h - %s" --author='user name 2' --since="2022-10-27" --until="2022-11-09" --shortstat GitHub - 6 days ago - 5e9d2c71 - Merge pull request #233 from repo/fix/user_name2/item-348 GitHub - 10 days ago - 394779f5 - Merge pull request #238 from repo/feature/user_name2/item-347 GitHub - 13 days ago - 26e8f3a5 - Merge pull request #235 from repo/feature/user_name2/item-341 12 files changed, 328 insertions(+), 16 deletions(-)
针对user name的命令:
$ git log --all --pretty="%cn - %cr - %h - %s" --author='user name' --since="2022-10-27" --until="2022-11-09" --shortstat GitHub - 5 days ago - 8e9d2c71 - Merge pull request #183 from repo/fix/user_name/item-448 GitHub - 7 days ago - 194779f5 - Merge pull request #178 from repo/feature/user_name/item-447 GitHub - 10 days ago - 86e8f3a5 - Merge pull request #175 from repo/feature/user_name/item-441
原因分析
这既不是Git的bug,也不是操作失误,关键在于Git和GitHub对合并提交的变更统计逻辑存在差异:
- Git默认情况下,
git log --shortstat只会统计合并提交本身的内容变更。但绝大多数PR合并提交只是单纯的分支合并操作,本身没有任何代码修改,所以不会显示变更统计。 - 你看到
user name 2的那条统计,对应的是一个手动解决过冲突的合并提交——这类合并提交本身包含了冲突解决的代码修改,因此--shortstat会展示这些修改的统计数据。 - GitHub网页端显示的PR合并变更,是把整个PR分支上所有提交的变更汇总在一起展示,而不是只看合并提交本身的内容。这就是为什么GitHub能看到统计,本地
git log --shortstat却看不到的核心原因。
内容的提问来源于stack exchange,提问作者tad bojanowski
相关产品推荐
相关产品推荐

