目标分支与源分支均已删除时,能否撤销Git合并操作?
问题解答
变更是否丢失?
不会丢失。你本地还保留着有误的目标分支和已合并的分支,这些分支上的所有提交记录都存储在本地Git仓库中,只要不主动删除本地分支或清理提交历史,变更就不会消失。
GitLab为何允许此操作?
GitLab的分支合并逻辑核心是基于提交对象而非分支本身:
- 若你是通过合并请求(MR)完成操作,可能是MR创建后目标分支被删除,但MR的合并动作仍能执行——因为合并时是将源分支的提交与目标分支的最后一次提交进行合并,生成新的合并提交,即使目标分支已被删除,只要合并操作能找到目标分支的最后提交记录,就能完成合并。
- 合并后自动移除源分支的配置是独立执行的逻辑,只要合并动作完成,不管目标分支状态如何,都会触发源分支的删除。
解决本地拉取报错的方法
你遇到的报错是因为本地wrong-target-branch的上游关联指向了已被删除的远程分支,执行以下操作即可修复:
- 取消本地分支的上游关联:
git branch --unset-upstream wrong-target-branch - 若不再需要本地的错误目标分支,直接删除:
git branch -D wrong-target-branch
除重新操作外的其他解决方案
Cherry-pick合并提交到正确分支
切换到正确的目标分支,将错误合并产生的合并提交挑过去:git checkout correct-target-branch git cherry-pick <合并提交的哈希值> git push origin correct-target-branch(可以用
git log wrong-target-branch找到合并提交的哈希值)恢复源分支并重新合并
若本地还保留着源分支,先将其推回远程恢复:git push origin source-branch然后在GitLab上重新创建合并请求,将源分支合并到正确的目标分支,完成后再删除源分支即可。
Rebase源分支提交到正确分支
如果源分支的提交没有冲突,可以将源分支的提交变基到正确分支上:git checkout source-branch git rebase correct-target-branch git checkout correct-target-branch git merge source-branch git push origin correct-target-branch
内容的提问来源于stack exchange,提问作者auf keinsten
相关产品推荐
相关产品推荐

