Git变基合并冲突误选删除文件,如何修正提交历史
解决rebase误删文件后的提交历史问题
方法一:重置到rebase前状态,重新处理冲突
查看rebase操作的历史记录,定位到rebase开始前的提交哈希:
git reflog在输出里找类似
HEAD@{x}: checkout: moving from origin/main to your-branch或HEAD@{y}: rebase start的记录,复制对应的提交哈希(比如abc123)。强制重置到该提交,抹除后续的错误操作和多余提交:
git reset --hard abc123注意:此操作会清除当前工作区和暂存区的未提交修改,执行前确认没有未保存的重要内容。
重新执行rebase:
git rebase origin/main再次遇到
src/CMakeLists.txt的冲突时,正确处理:- 保留main分支的文件:
git checkout --theirs src/CMakeLists.txt - 将文件加入暂存区:
git add src/CMakeLists.txt - 继续完成rebase:
git rebase --continue
- 保留main分支的文件:
方法二:修改已完成的rebase历史(适合不想重新执行整个rebase的场景)
如果rebase已经完成,且只有最后那个恢复文件的提交是多余的:
启动交互式rebase,编辑
origin/main到当前分支的提交记录:git rebase -i origin/main在弹出的编辑器中,找到恢复
src/CMakeLists.txt的那条提交,把它前面的pick改成drop,保存并退出。此时Git会回到冲突发生的提交节点,重新处理冲突:
- 执行
git checkout --theirs src/CMakeLists.txt - 执行
git add src/CMakeLists.txt - 执行
git rebase --continue
后续提交会自动重新应用,最终得到和正确处理冲突一致的提交历史。
- 执行
内容的提问来源于stack exchange,提问作者Wör Du Schnaffzig
相关产品推荐
相关产品推荐

