撤消快进合并

Fab*_*amp 63 git

我已经对我希望撤消的git仓库进行了一些更改.

我的git repo看起来像这样:

A-B----     master
   \   /
    C-D     * develop
Run Code Online (Sandbox Code Playgroud)

我在develop分支机构,忘记它与master分支不同,进行了更改develop,将其合并master,然后推送到我的遥控器(称为publish).

因为自B(共同祖先)以来主人没有变化,所以git进行了快进合并.

现在,我的回购看起来像这样:

A-B-C-D   master, develop, remotes/publish/master, remotes/publish/develop.
Run Code Online (Sandbox Code Playgroud)

我想恢复最后一次合并,恢复master到B.

从我在如何撤消Git中的最后一次提交中读到的内容,我曾经git reset sha-of-B将我的master分支恢复到修订版B.

问题:

  • 如何恢复develop到修订版D?
  • 然后,我如何将这些更改推回到远程/发布?

Sim*_*ias 81

如果重置分支主机,则不会触及开发分支.为了按顺序重新输入所有内容,您应该:

git checkout master
git reset --hard sha-of-B
git checkout develop
git reset --hard sha-of-D
git checkout master
git merge develop --no-ff
Run Code Online (Sandbox Code Playgroud)

  • @SimonBoudrias:永远不要推荐`push --force`.使用`git push publish --force-with-lease`代替. (6认同)
  • 啊,只需强制推动`git push --force` (3认同)

Rob*_*mer 20

  • 想象你仍然在你合并和推动的大师
  • git reset --hard @{1}
    • 这会将分支"master"重置为计算机上的一步(即"B")
  • 为了发展什么都不做,因为它仍然应该在"D"
  • git push publish develop --force-with-lease=master
    • 这会以通常的方式推动分支"发展"
    • 并且它还向后推动分支"主人",并--force-with-lease以安全的方式获得许可
    • 使用may--force可以默默地覆盖别人的工作,所以我从不使用它

  • "git reset --hard @ {1}"非常适合我的情况.我 - 没有合并,它有100多个提交,并且不想为每个提交软重置.谢谢!+1 (2认同)
  • @Noumenon这是问题中建立的存储库的名称。在“git push”手册页中称为“<repository>”。 (2认同)