撤消旧的快进提交
Undoing an old fast foreward commit
回顾我所做的一些工作,有一个快进的提交真的让人很难分辨在做什么,所以我想把那个提交移动到它自己的分支。这是我目前的情况:
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
如果你有:
A--B--C--D (master)
|
(branch2)
您可以重置 master
并重做 merge (in a non-FF way), then cherry-pick D
(or 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
)之上
回顾我所做的一些工作,有一个快进的提交真的让人很难分辨在做什么,所以我想把那个提交移动到它自己的分支。这是我目前的情况:
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
如果你有:
A--B--C--D (master)
|
(branch2)
您可以重置 master
并重做 merge (in a non-FF way), then cherry-pick D
(or 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
)之上