这是当前的分支设置:
A---B---C-----------------D---E---F master
\
G---H---I---J---K---L branchA
Run Code Online (Sandbox Code Playgroud)
我意识到当我去branchA工作时,最后几次提交是为了一个应该是新分支的新功能.所以我想得到这样的树看起来像:
A---B---C-----------------D---E---F master
\
G---H---I------------M branchA
\
J---K---L branchB
Run Code Online (Sandbox Code Playgroud)
我不想重命名分支,因为这会将G,H和I重命名为新的分支名称.我可以创建一个新的分支,从I(git branch branchB <SHA-of-I>)开始,但是如何最好地"移动"提交J,K和L?git merge branchA而在branchB上只是将branchB头快速转发到与branchA相同的点.
你不需要移动J,K和L.你想在branchB上使用它们吗?使branchB指向提交L.
git branch branchB branchA # start branch B at commit L
git checkout branchA
git reset --hard <SHA1-of-I>
# If you don't want to check out branchA, you could use
# git branch -f branchA <SHA1-of-I>
Run Code Online (Sandbox Code Playgroud)
需要移动的东西是branchA,它会被移回提交I.
如果已经提交了M,那么您将需要使用rebase.而不是重置branchA,用于git rebase --onto <SHA1-of-I> <SHA1-of-L> branchA将所有超过branchA上的提交L的内容移动到提交I.