Git 我需要暂时撤消合并,以便以后可以再次尝试

Git 我需要暂时撤消合并,以便以后可以再次尝试,git,merge,Git,Merge,我已将一个分支(功能/b)合并到开发中, 我遇到了合并冲突,我对如何解决这些冲突做出了错误的决定。 然后,我手动承诺修复其他一些问题。 更多的提交加入到feature/b中,然后我也合并了这些提交 然后我意识到我的错误,恢复了上次合并 所有的东西都被推到了遥控器上,被团队拉着 事情现在一团糟。我需要重新获得稳定的开发,但也能够再次尝试解决原始合并中的冲突 我解决这个问题的最佳选择是什么 恢复所有三个步骤?如果我理解正确的话,这就不正确了 给我第二次机会来解决最初的冲突 重置头部?有效地摧毁历史

我已将一个分支(功能/b)合并到开发中, 我遇到了合并冲突,我对如何解决这些冲突做出了错误的决定。 然后,我手动承诺修复其他一些问题。 更多的提交加入到feature/b中,然后我也合并了这些提交 然后我意识到我的错误,恢复了上次合并

所有的东西都被推到了遥控器上,被团队拉着

事情现在一团糟。我需要重新获得稳定的开发,但也能够再次尝试解决原始合并中的冲突

我解决这个问题的最佳选择是什么

  • 恢复所有三个步骤?如果我理解正确的话,这就不正确了 给我第二次机会来解决最初的冲突
  • 重置头部?有效地摧毁历史?这会影响其他分支机构的历史吗
  • 在我去之前,放弃并创建一个分支 错了吗
谢谢


我已经阅读了这个密切相关的答案,但我正在寻找更多的指导:

这听起来确实是一个混乱的局面

我的方法将是您最后的建议:在出现问题之前放弃并创建一个新的开发分支。在该分支上,您可以重做未正确完成的合并,然后选择在错误合并后完成的所有良好提交。推动这一点,并要求团队在新的开发分支上工作


此解决方案的优点是,如果任何人在坏的开发分支上有未推送的提交,他们也可以选择好的分支。

此答案假设您当前的
功能/b
分支如下所示:

feature/b:  .. M -- A -- B -- C
这里的
M
是您不想要的合并提交,然后提交
A
C
来自其他开发人员,他们拉了分支,然后推了。我们可以尝试在以下范围内使用
git revert

git revert -m 1 HEAD~3^..HEAD
语法
HEAD~3^..HEAD
意味着将提交从
HEAD
提交之前的三个(包括三个)恢复到包括
HEAD
提交的一个。
-m1
选项告诉Git跟随分支的第一个父级,这通常是远程上的分支(合并的分支源是
-m2


请注意,这里需要
git revert
,因为您已经发布了这个分支。硬重置和其他更改历史记录的选择在这里并不理想。

无论您做什么,都不要重置和强制
开发
,因为它与其他开发人员共享,而且会变得更混乱

您可以恢复,但正如您所看到的,请注意,以前合并的提交将在将来的合并中被忽略(因为历史记录没有更改)。 我会重新创建feature分支,就像它是一个新分支一样

通过指定从哪个提交开始重基,您可以轻松地使用重基执行此操作,您提供的链接对此进行了解释

假设我们处于这种情况

 /B-C\(feature/1)
A-----D-E(develop)
其中A是合并前的
develope
,C是合并时的
feature/1
分支,D是合并提交,E是修复它的尝试

首先恢复D和E,因为D是一个合并提交,您必须使用
-m
指定要恢复到哪个父级,它应该是1,但选中(
git revert D-m1
)。 然后在提交时重新设置分支
功能/1
的基础
A
(分支的原点)

然后你会变成这样:

 /B-C\
A-----D-E-F(develop)
 \B'-C'(feature/1)
其中,F是还原的提交,B'和C'是新创建的提交

您可以将
feature/1
合并为一个新分支

 /B-C\
A-----D-E-F(develop)
 \B'-C'(feature/1)