撤消旧的快速前进提交

时间:2016-08-07 11:13:56

标签: git git-merge undo fast-forward

回顾一下我所做的一些工作,有一个快速提交真的让人很难分辨出什么工作,所以我想把它提交给它自己的分支。这是我目前的情况:

A--B--C--D

让我们说C是我想要移动的一个提交。 C(来自FF提交)也有它自己的分支(branch2)。我希望它看起来像:

A--B--------C2--D
    \      / 
     \    /
      C--/

所以C在branch2上,C2是合并提交,A,B和D都在master上。

以下是一些额外信息:

$ git reflog show branch2
245c52c branch2@{0}: commit: C
7c2a064 branch2@{1}: branch: Created from HEAD

$ git reflog show master
c0a8aff master@{0}: commit: D
244c52c master@{1}: merge branch2: Fast-forward
8a93b2f master@{2}: commit: B
fe872d8 master@{3}: commit: A

1 个答案:

答案 0 :(得分:2)

如果你有:

 A--B--C--D (master)
       |
   (branch2)

您可以重置master并重做merge (in a non-FF way),然后cherry-pick D(或rebase,如果D实际上是多次提交的话)

git checkout master
git branch tmp # mark D if you need to
git reset --hard B
git merge --no-ff branch2

 A--B----C2
     \   /
      --C (branch2)
         \
          --D (tmp)

然后:

git cherry-pick D

如果D实际上是由多个提交组成的,那么'tmp'分支会派上用场:

git rebase --onto master branch2 tmp

这将重播branch2之后的所有提交(因此不包括C),直到tmp HEAD(即D)在masterC2)之上