You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

git commit --amend与git show输出不一致问题求助

Git rebase amend后diff统计不一致的原因

出于测试和学习目的,多次执行git rebase -i并选择edit模式,在执行git rebase --continue前使用git commit --amend提交修改。但出现异常:执行git commit --amend后显示变更为1个文件修改、2行新增、1行删除,提交哈希为00001111;但执行git show 00001111时,diff显示有2行新增、2行删除。此外,在未包含该变更的分支上执行cherry-pick 00001111,输出显示'Auto-merging ... 2 insertions, 2 deletions'。

这三个场景的统计差异,核心是不同Git命令计算代码变更时,用的对比基准版本不一样:

  • git commit --amend的对比基准是「你正在修改的旧提交」
    在rebase的edit模式下,你选中了某个旧提交来修改。执行git commit --amend时,Git会拿当前暂存区的内容,和这个「旧提交」的内容做对比统计差异。比如这个旧提交本身已经删掉了一行,你本次amend只新增了2行、修改了一行,最终统计就是2行新增、1行删除。

  • git show的对比基准是「当前提交的新父节点」
    git show <commit>展示的是该提交和它直接父提交的差异。但rebase会重新构建提交链,你amend后的提交00001111的父节点,已经不是原来旧提交的父节点,而是rebase目标分支的某个最新提交。这个新父节点里包含了旧提交曾经删掉的那一行内容,所以对比00001111和新父节点时,会多出一次删除操作,最终显示2行新增、2行删除。

  • cherry-pick的对比基准是「目标分支的当前HEAD」
    当你把00001111 cherry-pick到未包含该变更的分支时,Git会计算这个提交的变更相对于目标分支HEAD的差异。因为目标分支里没有任何相关变更,提交00001111里的所有变更(2增2删)都会被完整应用,因此cherry-pick输出对应的统计结果。

内容的提问来源于stack exchange,提问作者Alex Martian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 10:03:21