撤消git合并

撤消git合并,git,merge,Git,Merge,我对Git没有什么经验,现在我遇到了一个大问题 以下是我当前的分支的外观: feature /---F1-----F2----\ / \ master -----M0-----M1-----M2-----M3-----M4 \ / bugfix \--B1-----B2-----------/ 情况: 有人做了一件非常糟糕的事情,推动了一

我对Git没有什么经验,现在我遇到了一个大问题

以下是我当前的分支的外观:

feature       /---F1-----F2----\
             /                  \
master -----M0-----M1-----M2-----M3-----M4
             \                        /
bugfix        \--B1-----B2-----------/
情况:

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

问题:

我怎样才能把事情重新安排好?我想要M0,M1,M2,F1,F2,B1和B2。但我不想要M3和M4(因为M4显然已损坏)。如果我不得不放弃更改,那么可以牺牲F1和F2:)

我查看了git revert,但我不确定自己是否完全理解它的工作原理。所以我真的希望能在如何解决这个问题上得到帮助

提前感谢。

如果您尚未推送(发布)合并提交,请使用git reset。例如,在主分支上,假设您的工作树是干净的,那么执行git重置——很难

更多信息:

如果您确实发布了更改,则可能需要考虑做出回复提交。更多信息请点击此处:


为了澄清,你想要的是这个,对吗

feature       /---F1-----F2
             /                 
master -----M0-----M1-----M2
             \            
bugfix        \--B1-----B2
确保
HEAD
s
功能
bugfix
分别处于
F2
B2
状态

编辑:如果
功能
错误修复
没有分支,则将它们设为分支(如果未被限制,则隐藏您的工作):

编辑结束

然后将主机重置为M2:

git checkout master
git reset M2 --hard
(重置将使您丢失本地更改,如果不希望,请将其隐藏。)

M3
M4
不会立即销毁,但最终会销毁。它们不应该出现在git日志或gitk中


然后是时候合并
功能
并生成一个正确的
M3'

是的,有点像,但“功能”、“主控”和“错误修复”实际上并不是分支,我怀疑这是令人困惑的。也就是说,3 ppl致力于自己的主分支机构的变更。一个人做了一个糟糕的合并,然后推了。我取消了错误的合并。现在我想要一种排除错误合并的方法,同时仍然保留所有单独的更改…那么
功能
错误修复
是否没有分支?当然,
feature
的作者在自己的回购协议中有分支机构。您应该做的是将主机重置为M2,并要求
功能
的作者执行相同的操作(但确保他不会丢失分支
功能
),并再次正确地进行合并。如果你想亲自查看我的更新。你真的有一个没有
master
分支的回购吗?我们有
master
分支。好的,现在我明白你说的让另一个人重置这个分支是什么意思了。谢谢
git checkout master
git reset M2 --hard