首页 > 解决方案 > Git在合并后恢复提交

问题描述

我有以下情况:

Remote: A<-B<-----C<-D<-------\
Local:      \-B1<------B2<-B3<-M

因此,我已将远程拉取合并到我的本地存储库 (M) 中。我现在想恢复 B3 并返回 B2。我试着做一个

git revert --no-commit -m 1 M
git revert --continue

现在我的 git 日志显示以下内容:

commit R
Revert "Merge branch 'master' of https://...."
This reverts commit M, reversing changes made to B3

commit M
....

commit B3
....

....

然而,即使 git 日志提到“撤销对 B3 所做的更改”,当我执行 git status 时,它显示的内容与我在B3 提交后所期望的相同。看来,我实际上是向前而不是向后(新提交 R)。

我的问题:

  1. 如何返回 B2?
  2. 恢复合并是否正确/需要?

标签: gitgit-commitgit-revert

解决方案


您可以重置masterB2执行合并:

git reset --hard B2
git merge remote/master

提交是不可变的,所以如果你想合并到不同的提交中,你必须从头开始。

另一方面,如果您对自己的历史感到满意并且只想查看B2,则可以查看:

git checkout B2

很可能revert不是您想要的。revert将添加一组提交,以反转您选择的范围引入的更改。通常有更简单的方法可以到达您想要的状态。


推荐阅读