一段时间后撤消合并,会发生什么?

Undo a merge after time, what happens?

如何撤消已推送但后来被分支的合并?回购会发生什么?

之前曾以不同的形式问过这个问题,但我不确定是否有任何答案解释了之后发生的事情。

假设这是 repo 的状态:

A--B--C---------G--H
       \       /    \
        D--E--F      I--J

阅读几个答案后,我认为我应该 git 恢复?在 G?或者git重置?

如果我在 FG 合并上执行 git 重置或 git 还原,H、I、J 代码会发生什么情况,它可能会使用一些已合并的代码?

我仍然对使用 git 的更高级功能一窍不通:/

Edit1: 我应该指出这不是 public 回购。所有分支都由一个小型内部团队维护。

What i want is to undo the merge and continue working on the DEF branch

Undoing a merge through a revert 是一种至少不改变主分支历史的方法

git revert -m 1 G

并且您可以在不知道合并的分支 DEFn 上继续:您可以添加新的提交并稍后合并。 但是,作为 by lucash 不会重新应用来自提交 DEF 的更改,而只会合并新的提交来自该分支,很可能由于 DEF 分支中已知的缺失更改而导致问题。
因此,在合并分支之前,您需要首先还原 revert-commit(git revert -m 1 G 的结果)以避免该问题。

IJK 可以保留在 H:还原会取消 G 引入的更改,并且不会影响 H

另一个,我相信更简单的方法来完成你想要的是从提交 "F" 创建一个新分支。继续对 D E F 系列进行更改。然后合并回您的 "main" 分支(从 A B C 开始)。到那时,无论谁在工作,我都不会得到您的更改,您也不会影响它们。但是他们可以随时将 I J 合并到 A B C 而不会影响你。

还原可能会很混乱。特别是恢复合并。之前的答案是正确的,您将不得不还原还原,或者在完成更改后挑选还原的合并。如果您的更改触及已恢复的文件,您可能会遇到混乱的合并。 :(

如果其他人想要创建一个分支并在没有您的 DEF 更改的情况下工作,只需让他们从 C 分支,进行更改并在完成后合并。在你完成之前或之后合并都没有关系。

我的建议可能会失败的地方是,如果 I J 已完成,并准备好推向生产,而 D E F 尚未完成。然后,还原确实成为不幸的必要。 :(

祝你好运!