如何在合并之前还原到分支并保持合并后所做的更改

时间:2018-11-15 22:16:28

标签: git

问题:

我有A,B分支。B被合并为A,之后对A进行了更改。我想在与B合并之前恢复为A,并保留合并后所做的更改。

1 个答案:

答案 0 :(得分:1)

据我了解,您的存储库如下所示。

1 - 2 --------- 7 - 8 [A]
     \         /
      4 - 5 - 6 [B]

B在提交2时从A分支出来。提交4、5和6。然后在7合并回A。然后在A上进行另一个提交8。

如果您没有删除B,它仍然存在。如果这样做,则必须找到原始提交并还原分支标签。您可以使用git log --graph --decorate --oneline A进行此操作。您会看到类似...

* (A) 4f8cea2 Some commit
* 9a7fd82 Merge B into A
|\  
| * c772b6d some commit on B
| * c9178a2 another commit on B
| * d7a579d a commit on B
|/
* b4d1b73 The commit before B

在这种情况下,c772b6d是对B的最后一次提交。

git branch B c772b6d

那将恢复B。


要还原A,请进行交互式变基以重新提交2。再次使用git log查找该提交。在我们的示例中为b4d1b73。因此,结帐A并重新定位到那里。

git checkout A
git rebase -i b4d1b73

您将获得像这样的编辑器:

pick 4f8cea2 Some commit
pick c772b6d some commit on B
pick c9178a2 another commit on B
pick d7a579d a commit on B

这些都是A和b4d1b73之间的所有提交,但没有合并提交。变基将使A变平。现在从B中删除提交,仅将提交保留在A上。

pick 4f8cea2 Some commit

然后save和Git将仅在b4d1b73顶部写入其余提交。你会...

1 - 2 - 8' [A]
     \         
      4 - 5 - 6 [B]

如果您遇到了重新设置的麻烦,则ORIG_HEAD指向A的原始版本。您可以使用git reset --hard ORIG_HEAD恢复它。