如何撤消已推送且后来已分支的合并?回购会发生什么?
之前已经提出了不同的变化,但我不确定是否有任何答案解释了之后会发生什么。
假设这是回购的状态:
A--B--C---------G--H
\ / \
D--E--F I--J
在阅读了几个答案后,我认为我应该做一个git revert?在G?还是git重置?
H,I,J代码会发生什么变化,如果我在FG合并上执行git reset或git revert,可能会使用一些已合并的代码?
我仍然是使用git的更高级功能的菜鸟:/
编辑1:我应该提一下,这不是一个公共回购。所有分支机构都由一个小型内部团队维护。
答案 0 :(得分:0)
我想要的是撤消合并并继续处理DEF分支
Undoing a merge through a revert是一种至少不会改变主分支历史的方法
git revert -m 1 G
你可以继续不知道合并的分支DEF
n:你可以添加新的提交并稍后合并。
但是,在commented lucash之后,不会重新应用提交D
,E
和F
的更改,但只会合并来自该分支的新提交,很可能由于DEF
分支中已知的缺失更改而导致问题。
因此,在合并分支之前,首先需要还原revert-commit(git revert -m 1 G
的结果)以避免该问题。
IJK
可以保留在H
上:恢复会取消G
引入的更改,并且不会影响H
。
答案 1 :(得分:0)
另一个,我相信更简单的方法来实现你想要的就是从提交中创建一个新的分支" F"。继续对D E F系列进行更改。然后合并回你的" main"分支(从A B C开始)。那时候无论谁工作,我都不会有你的改变,你不会影响他们。但是他们可以随时将I J合并到A B C而不会影响你。
还原可能很乱。特别是还原合并。并且之前的答案是正确的,您必须还原还原,或者在完成更改后樱桃选择还原的合并。如果您的更改触及了已还原的文件,您的手上可能会出现混乱。 :(
如果其他人想要在没有DEF更改的情况下创建分支并工作,只需让他们从C分支,进行更改并在完成后合并。如果他们在你完成之前或之后合并,那将无关紧要。
我的建议会破坏的地方是,如果我已完成,并准备被推向生产,并且D E F尚未完成。然后一个恢复确实成为一个不幸的必需品。 :(
祝你好运!