git branch几个提交前?

Mid*_*ing 3 git

这是当前的分支设置:

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相同的点.

Cas*_*bel 6

你不需要移动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.