使用git rebase -i执行squash操作报错:cannot 'squash' without a previous commit
解决
git rebase -i 报错 error: cannot 'squash' without a previous commit 哦,我一眼就看出问题所在了——你在交互式变基的时候,把仓库的第一个提交标记成了squash,这根本行不通嘛!
为什么会报错?
squash(压缩合并)的核心作用是把当前提交合并到它的前一个提交里,而你指定的哈希00ffa75caccf0118b9e89bc2bb70c4a7417b223a是仓库的初始提交,它没有任何前置提交。Git总不能把一个提交合并到“空气”里吧?所以直接抛出了这个错误。
快速修复步骤
首先先终止当前失败的变基进程:
git rebase --abort
然后根据你的需求选对应的操作:
如果你想把第二个提交合并到第一个提交里:
执行包含根提交的交互式变基命令:git rebase -i --root这时编辑界面会列出所有提交(包括第一个),你只需要把第二个提交的
pick改成squash(或者用缩写s),保存退出后,再编辑合并后的提交信息就完成了。如果你只是想修改第一个提交的信息:
直接用git commit --amend更简单,完全不需要走变基流程。
关于Git配置的排查
你怀疑是配置问题?其实这个报错大概率是操作逻辑问题,但如果你还是担心配置异常,可以尝试重置全局变基相关配置:
git config --global --unset-all rebase.*
或者直接重置所有全局配置(注意:这会清空你之前设置的全局Git配置,谨慎操作):
git config --global --reset
下次记得哦:squash只能用于有前置提交的提交上,处理初始提交的合并/修改,一定要用--root参数启动交互式变基!
内容的提问来源于stack exchange,提问作者Bu Kinoshita
相关产品推荐
相关产品推荐

