Git代码已合并到master分支,如何撤销合并、压缩commit后重新合并
前提注意事项
- 操作前请先备份所有本地未提交的代码,避免误操作丢失内容
- 若已有其他协作者拉取了本次合并后的远程master分支,请先和团队全体成员协商一致后再执行后续操作,强制修改远程公共分支历史会导致其他协作者的本地分支出现大量冲突
操作步骤
1. 撤销本地+远程master的错误合并
首先切换到本地master分支,同步最新的远程代码:
git checkout master git pull origin master
执行log命令查找合并前最后一个正常commit的哈希值(通常是7位字符串,假设为a1b2c3d):git log --oneline
将本地master分支重置到该正常commit节点:
- 如果你需要保留本次合并带来的所有代码修改,后续直接在本地压缩,执行软重置:
git reset --soft a1b2c3d - 如果你要回到原开发分支处理压缩,不需要保留当前master的合并修改,执行硬重置:
git reset --hard a1b2c3d
接下来强制推送重置后的本地master到远程,覆盖错误的合并记录:git push -f origin master
2. 压缩开发分支的零散commit
切换到你之前要合并的开发分支(假设分支名为feature/xxx):git checkout feature/xxx
执行交互式rebase操作压缩commit:git rebase -i a1b2c3d
在弹出的编辑界面中,把除了第一个commit之外的所有commit前的pick改为s或squash,保存退出后编辑统一的commit提交信息,即可完成所有测试commit的压缩。
3. 重新合并压缩后的分支到master
切换回master分支:git checkout master
执行合并操作:git merge --no-ff feature/xxx
核对commit历史符合要求后,推送到远程仓库即可:git push origin master
内容的提问来源于stack exchange,提问作者swyun14
相关产品推荐
相关产品推荐

