有没有办法我可以撤销不是最后一个的git push

时间:2018-11-19 07:07:49

标签: git

我的git提交顺序如下:

commit A ==> commit B(merge master) ==> commit C ==> commit D

提交 B 用于拉出并合并主文件,之后,提交 C D 用于添加/更改文件。每次提交都被远程推送。

但是,当提交 D 进行远程推送时,**主回滚**。然后我的分支有一些代码是从提交B(合并主服务器)获得的,当前主服务器没有,因此已经回滚了。

为了与母版保持一致,我再次拉并合并了母版,但没有任何效果。 那么有什么方法可以删除提交B(合并主文件)?之后,提交流程如下:

commit A ==> commit C ==> commit D.

每条建议都将不胜感激。

1 个答案:

答案 0 :(得分:0)

鉴于该分支及其合并提交已被推送到远程并且已公开,我们应该谨慎行事,避免重写该分支的历史记录。一个安全的选择是还原合并提交B:

git checkout your_branch
git revert -m 1 <SHA-1 hash of B>

这假定您要跟随合并的第一个父对象。如果不是,请改用-m 2。您可以检查git log来验证第一父级是否紧随提交A。

请注意,此解决方案将在分支的顶部进行新的提交。要推送这些更改,正常的推送就足够了:

git push origin your_branch