Git回退失败,如何正确回退并重新合并temp分支?
Git合并错误后的回退与重新合并方案
问题背景
你在temp分支修复布局问题后,合并到master分支时出现错误,尝试用git revert回退合并提交失败,报错提示合并提交需要指定-m参数。当前仓库核心提交历史如下:
commit 2acfb51145022013be9cf65aa6bb154aaadc947e (HEAD -> master) Merge: 428c94aad9 5cf5a6a5e5 Author: oneeyeman1 <ikorot01@gmail.com> Date: Sat Jan 6 20:50:52 2024 -0600 Fix merge conflict commit 5cf5a6a5e57f9aa6cb328c55e8eafa03169afe87 (origin/temp, temp) Author: oneeyeman1 <ikorot01@gmail.com> Date: Sat Jan 6 20:34:23 2024 -0600 Show namd properties withot interfering with the main window layout commit 428c94aad9789b9d5d57b51b13f63f4249c667e8 (origin/master) Author: oneeyeman1 <ikorot01@gmail.com> Date: Thu Jan 4 21:06:11 2024 -0600 Implement showing the and properties dialog commit ba923f75a327cd5e8e505ef87db29a1d1405511b Author: oneeyeman1 <ikorot01@gmail.com> Date: Mon Jan 1 23:37:21 2024 -0600 Fix layout when switching query sources
执行git revert时的错误信息:
C:\Users\Igor\OneDrive\Documents\dbhandler_app [master ↑2 +10 ~6 -0 !]> git revert 2acfb51145022013be9cf65aa6bb154aaadc947e error: commit 2acfb51145022013be9cf65aa6bb154aaadc947e is a merge but no -m option was given. fatal: revert failed
最佳解决方案
根据仓库是否已推送到远程,分两种处理方式:
方式一:未推送远程(推荐)
如果master分支的错误合并还没推送到远程仓库,直接用git reset硬重置到目标提交,操作更简洁:
- 确保当前处于master分支:
git checkout master - 硬重置到
ba923f75a327cd5e8e505ef87db29a1d1405511b提交:git reset --hard ba923f75a327cd5e8e505ef87db29a1d1405511b - 重新合并temp分支,仔细处理冲突:
git merge temp
方式二:已推送远程(避免改写公共历史)
如果错误合并已经推送到远程,不能用reset(会破坏其他协作者的历史),需用git revert逐步回退:
- 回退合并提交
2acfb51145,指定-m 1表示回退到合并前的master分支状态(父分支1对应合并前的master):git revert -m 1 2acfb51145022013be9cf65aa6bb154aaadc947e - 回退
428c94aad9提交:git revert 428c94aad9789b9d5d57b51b13f63f4249c667e8 - 重新合并temp分支并处理冲突:
git merge temp
错误原因说明
合并提交包含两个父分支(本次合并中是master的428c94aad9和temp的5cf5a6a5e5),Git无法自动判断要回退到哪个分支的状态,因此必须用-m参数指定主父分支的序号(通常-m 1对应合并前的当前分支)。
内容的提问来源于stack exchange,提问作者Igor
相关产品推荐
相关产品推荐

