Git rebase时误用--amend --reset-author强推后代码异常如何修复?
问题修复方案
Git 所有操作都会在本地 reflog 中留下快照记录,不存在完全无法补救的情况,按以下流程操作即可恢复到正常状态:
1. 定位变基前的正常提交哈希
执行命令git reflog,输出会按时间倒序列出你本地所有Git操作对应的提交快照,找到以下任意一个节点的哈希值即可:
- 你完成功能开发后首次推送到远端的提交,对应的记录会显示你当时填写的提交信息
- 你执行
git rebase master操作前,开发分支HEAD指向的提交,对应的上一条操作记录为checkout: moving from master to 你的开发分支名
将该哈希值记为ORIGIN_HASH。
2. 重置本地开发分支到正常状态
执行以下命令覆盖当前错误的变基结果:
# 确保当前在你的开发分支上 git checkout <你的开发分支名> # 硬重置到变基前的正常提交 git reset --hard <ORIGIN_HASH>
重置完成后可以执行git diff确认当前分支只有你自己的代码变更。
3. 重新执行规范变基流程
# 拉取master最新代码 git checkout master && git pull # 切回开发分支 git checkout <你的开发分支名> # 执行变基 git rebase master
如果出现合并冲突:
- 手动修复所有冲突文件
- 执行
git add <冲突文件路径>将修复后的文件加入暂存区 - 不要在rebase流程未完成时执行commit或amend操作
- 执行
git rebase --continue完成变基 - 变基全部完成后,再执行
git commit --amend --reset-author修改作者信息
4. 推送恢复后的分支到远端
确认本地分支内容无误后,执行git push -f origin <你的开发分支名>强制覆盖远端的错误分支即可。
提示:如果团队其他成员已经基于你之前错误推送的分支做了开发,操作前需要同步告知团队你要恢复分支,避免后续产生额外冲突。
内容的提问来源于stack exchange,提问作者rogerabbott
相关产品推荐
相关产品推荐

