问题:
我有A,B分支。B被合并为A,之后对A进行了更改。我想在与B合并之前恢复为A,并保留合并后所做的更改。
答案 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
恢复它。