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的一些基本信息,否则远程设备绝对不可能这样做。“完全恢复合并并阻止我再次执行”这是已知的问题,并且有一些方法来处理它,例如,实际上有很多非常相似的问题。由于非修复方案是理想的,所以如果您负担得起的话,强制推送并不是那么糟糕的解决方案(也就是说:在强制推送之后,您的所有开发人员都能够重新设置基础)