git log与git rebase -i提交数量不符的原因及正确操作
Git交互式变基提交数量不一致的原因及解决方法
为什么提交数量会不一致?
核心问题出在git log和HEAD~n的计数逻辑完全不同:
git log默认只展示当前分支上的提交,不会包含合并进来的其他分支的提交。HEAD~n是从HEAD开始往回数n个祖先提交节点,如果你的分支有过合并操作(比如merge过其他分支),HEAD的祖先链会包含合并分支的所有提交。比如你当前分支自己有18条提交,但之前合并过一个带32条提交的分支,那HEAD的祖先链总共有50条,执行git rebase -i HEAD~18就会把这50条提交都列出来。
正确的操作方法
别再用HEAD~n这种方式,改用提交哈希指定变基起点,步骤如下:
- 用
git log --oneline查看提交记录,找到你要合并的那批提交的父提交(也就是这批提交的前一个提交)的短哈希。比如你要合并从提交d4e5f6g到最新提交a1b2c3d的所有内容,就找d4e5f6g的前一个提交x7y8z9w。 - 执行交互式变基命令:
git rebase -i x7y8z9w,此时弹出的编辑界面里只会显示你要处理的那批提交,数量和你git log里看到的一致。
另外,如果你不确定父提交,也可以直接用你要保留的最早提交的哈希,然后加^,比如git rebase -i d4e5f6g^,效果和上面一样,^表示该提交的父节点。
内容的提问来源于stack exchange,提问作者user2138149
相关产品推荐
相关产品推荐

