回顾一下我所做的一些工作,有一个快速提交真的让人很难分辨出什么工作,所以我想把它提交给它自己的分支。这是我目前的情况:
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
答案 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
)在master
(C2
)之上{ p>