如何将相同的提交再次合并到主分支?

5

我确实有这种情况:

enter image description here

昨天我将提交 223a3a6 合并到主分支中,但由于未适应某些 JSON 数据而失败。我迅速撤销了合并以避免破坏生产服务器。提交 495b186 撤销了提交 223a3a6。

我在提交 215b7a6 中修复了 JSON 数据。现在当我想再次将其合并到主分支时,我需要提交 223a3a6 和 215b7a6 的更改内容都在主分支中。

问题是提交 223a3a6 已经被合并到主分支中。Git 不允许我再次将其合并到主分支中。我们的主分支受到写保护,所以我无法重置主分支。

我该如何解决这个问题,将提交 223a3a6 和 215b7a6 合并到主分支中?


好的,也许是一个愚蠢的问题...但如果223a3a6已经在主分支上了,为什么还需要再次合并呢?或者你是在说你所做的还原操作也撤销了作为223a3a6提交的更改? - Gary Ewan Park
没错。提交 495b186 撤销了 223a3a6。 - mles
1
你不能完全做到,但也不必如此。请参考https://dev59.com/eJjga4cB1Zd3GeqPIlWs获取提示,并记住提交涉及两个不同的事情:一个是*历史记录*(父链接),另一个是*树*(通常从索引中制作快照的快照,当您运行`git commit时)。合并使用历史记录来(自动)构建树,但使用--no-commit`,您可以将其拆分为单独的阶段。 - torek
在这种情况下,我就退出了。不确定你要尝试的东西是否可行。我可能会重新做一份提交的工作,然后再次合并。很抱歉我的帮助有限。 - Gary Ewan Park
在合并到主分支之前,尝试切换到git checkout 215b7a6并运行git rebase master - sa77
禁止挑选,对吧? - Melebius
1个回答

3
这似乎几乎完全就是在 git howto-revert-a-faulty-merge 页面中描述的情况。
我猜你可能使用了 "git revert -m" 命令来撤销合并。这将撤销文件的更改,但合并分支的事实仍然记录在案。因此,以后任何尝试合并该分支的操作都只会带入该合并之后的修订版本。
"git merge -m" 的文档说:
“撤消合并提交意味着您永远不想要合并所带来的树变更。因此,后续合并将只带入先前撤消合并的祖先提交中未引入的树变更。这可能是您想要的,也可能不是。”
上述 howto 页面中提供的解决方案是撤销撤销合并的提交(这将重新引入该合并所做的更改),然后您应该能够合并该分支以引入修复。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接