80

我对我希望撤消的 git 存储库进行了一些更改。

我的 git 仓库看起来像这样:

A-B----     master
   \   /
    C-D     * develop

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

因为自 B(共同祖先)以来 master 没有任何变化,git 进行了快进合并。

现在,我的仓库看起来像这样:

A-B-C-D   master, develop, remotes/publish/master, remotes/publish/develop.

我想恢复上一次合并,恢复master到 B。

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

问题:

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

3 回答 3

102

如果您重置分支 master,它将不会触及开发分支。为了按顺序排列所有内容,您应该执行以下操作:

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
于 2013-01-13T21:53:09.740 回答
31
于 2016-05-09T15:42:01.583 回答
0

如果您似乎develop在跑步时被检查出来git reset,这就是让您感到困惑的原因。

您可以按以下方式修复develop

git checkout develop
git merge --ff-only D

现在,您可以恢复master到 B:

git checkout master
git reset --hard B

返回develop并推动它:

git checkout develop
git push develop
于 2013-01-13T21:53:49.157 回答