Git 如何在合并前恢复到分支并保留合并后所做的更改

Git 如何在合并前恢复到分支并保留合并后所做的更改,git,Git,问题: 我有分支A,B。B被合并到A中,在A中做了更改。我想在与B合并之前恢复到A,并保留合并后所做的更改 如果我理解的话,您的存储库是这样的 1 - 2 --------- 7 - 8 [A] \ / 4 - 5 - 6 [B] B在提交2时分支了A。承诺4、5和6。然后在7点合并回一个。然后,在A上进行了另一次提交,8 如果你没有删除B,它仍然存在。如果这样做了,则必须找到原始提交并恢复分支标签。您可以使用git log-graph-decoratio

问题:


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

如果我理解的话,您的存储库是这样的

1 - 2 --------- 7 - 8 [A]
     \         /
      4 - 5 - 6 [B]
B在提交2时分支了A。承诺4、5和6。然后在7点合并回一个。然后,在A上进行了另一次提交,8

如果你没有删除B,它仍然存在。如果这样做了,则必须找到原始提交并恢复分支标签。您可以使用git log-graph-decoration-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

若要还原,请执行交互式重新设置基础以提交2。同样,使用git日志查找该提交。在我们的示例中,它是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恢复它