1

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

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
4

1 回答 1

2

如果你有:

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

您可以重置并重master合并(以非 FF 方式),然后樱桃挑选 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),直到tmpHEAD(即)在( )D之上masterC2

于 2016-08-07T11:27:37.113 回答