Git 如何在没有push--force的情况下修复混乱(和被推)的合并

Git 如何在没有push--force的情况下修复混乱(和被推)的合并,git,Git,我的同事要求我协助解决以下问题: 他在一家分公司工作 他将master合并到feature中,导致了大量冲突 他通过“拿走他们的”或“拿走我的”解决了许多冲突,但往往是错误的 他承诺并推动合并 他意识到自己做了什么,于是请求帮助 我的第一反应是使用branch-f将指针向后移动,但这需要push--force,这在回购协议中是禁用的 第二次尝试是git revert-m,但是它完全恢复了合并,阻止了我再次进行合并,并说“已经是最新的”(因为从技术上讲,master的所有提交都在功能中进行了区

我的同事要求我协助解决以下问题:

  • 他在一家分公司工作
  • 他将
    master
    合并到
    feature
    中,导致了大量冲突
  • 他通过“拿走他们的”或“拿走我的”解决了许多冲突,但往往是错误的
  • 他承诺并推动合并
  • 他意识到自己做了什么,于是请求帮助
我的第一反应是使用
branch-f
将指针向后移动,但这需要
push--force
,这在回购协议中是禁用的


第二次尝试是
git revert-m
,但是它完全恢复了合并,阻止了我再次进行合并,并说“已经是最新的”(因为从技术上讲,
master
的所有提交都在
功能中进行了区域合并)

作为一个直接的解决方案,我最终放弃了分支,创建了一个新的、固定的分支

有没有更好的方法来解决这种情况,而不需要推——力?

您可以

$ git reset --hard @commit
如果合并是最后一次提交,则可以将
@commit
替换为
HEAD^
,否则替换为合并之前的最后一次提交

这将使您恢复到有问题的合并之前的状态。

您可以执行以下操作:

$ git reset --hard @commit
如果合并是最后一次提交,则可以将
@commit
替换为
HEAD^
,否则替换为合并之前的最后一次提交


这将使您恢复到有问题的合并之前的状态。

您能澄清一下“阻止我再次执行”吗?阻止你再做什么?我相信恢复是正确的方法,所以我会继续沿着这条路走下去。如果他是唯一一个使用分支
功能的人,那么最好是
重置
推-f
。如果不是,我同意@jbu.@jbu在恢复后尝试合并时,您会得到“已经是最新的”,因为此时,
master
的当前提示(以及导致它的所有提交)已经合并到
功能中。只是
功能
已在本地选择放弃这些更改。另一个想法是在原始提交之前软重置功能,然后添加、提交和推送。但是对于已经更新的消息,恢复将添加提交,因此除非我误解了git的一些基本信息,否则远程设备绝对不可能这样做。“完全恢复合并并阻止我再次执行”这是已知的问题,并且有一些方法来处理它,例如,实际上有很多非常相似的问题。既然非修复想法是理想的,强制推送并不是那个么糟糕的解决方案,若你们能负担得起的话(也就是说:你们的所有开发人员都能在强制推送后重新建立基础),你们能澄清一下“阻止我再这样做”吗?阻止你再做什么?我相信恢复是正确的方法,所以我会继续沿着这条路走下去。如果他是唯一一个使用分支
功能的人,那么最好是
重置
推-f
。如果不是,我同意@jbu.@jbu在恢复后尝试合并时,您会得到“已经是最新的”,因为此时,
master
的当前提示(以及导致它的所有提交)已经合并到
功能中。只是
功能
已在本地选择放弃这些更改。另一个想法是在原始提交之前软重置功能,然后添加、提交和推送。但是对于已经更新的消息,恢复将添加提交,因此除非我误解了git的一些基本信息,否则远程设备绝对不可能这样做。“完全恢复合并并阻止我再次执行”这是已知的问题,并且有一些方法来处理它,例如,实际上有很多非常相似的问题。由于非修复方案是理想的,所以如果您负担得起的话,强制推送并不是那么糟糕的解决方案(也就是说:在强制推送之后,您的所有开发人员都能够重新设置基础)