撤消git合并

abe*_*t80 10 git merge

我对Git没有经验,现在我有一个很大的问题落到了我的腿上.

这是我当前分支的样子:

feature       /---F1-----F2----\
             /                  \
master -----M0-----M1-----M2-----M3-----M4
             \                        /
bugfix        \--B1-----B2-----------/
Run Code Online (Sandbox Code Playgroud)

情况:

有人做了一件非常糟糕的事情并推出了一个非常糟糕的合并(M3).在我将B1和B2合并到M4之后,当我们的模型(不是源代码)无法加载时,我才注意到错误的合并.幸运的是,我还没有推过M4.

问题:

我该如何重新设置好的东西?我想要M0,M1,M2,F1,F2,B1和B2.但我不想要M3和M4(因为M4显然已被打破).如果我不得不放弃改变,那么可以牺牲F1和F2 :)

我看着,git revert但我不相信我完全理解它是如何工作的.所以...我真的希望得到如何解决这个问题的帮助.

提前致谢.

Gau*_*ier 6

所以要澄清一下,你想要的是这个,对吧?

feature       /---F1-----F2
             /                 
master -----M0-----M1-----M2
             \            
bugfix        \--B1-----B2
Run Code Online (Sandbox Code Playgroud)

确保HEAD小号featurebugfix仍然在F2B2分别.

编辑:如果feature并且bugfix没有分支,请将它们设为分支(如果未分配则隐藏您的工作):

git checkout F2
git branch feature
git checkout B2
git branch bugfix
Run Code Online (Sandbox Code Playgroud)

编辑结束

然后将主机重置为M2:

git checkout master
git reset M2 --hard
Run Code Online (Sandbox Code Playgroud)

(重置会让你丢失你的本地更改,如果你不想这样,就会藏匿它们.)

M3并且M4不会立即被摧毁,但最终会被摧毁.他们不应该出现git log或gitk.

然后是时候合并feature并做出一个M3'正确的.