我有以下几点:
A---B---C-----D-- branch dev
\--C'-E-/ branch test
我做得不好:C和C'几乎是相同的提交,如果我可以在C上启动分支 test 而不是B,那就更有意义了。
我怎么能这样做?,我想反驳,但我不确定如何使用它,thx
修改:不清楚 我想要的是什么:
A---B---C-----D-- branch dev
\-E-/ branch test
或
A - B - D - E - D,如果不可能
答案 0 :(得分:10)
您可以在临时分支(由C
制成)上重新定位
请参阅git rebase
和Rebasing以及git branch
。
git branch tmp C
git checkout test
# rebase the current branch (test) on top of tmp
git rebase tmp
git branch -d tmp
那应该给你:
A---B---C-----D-- branch dev
\--C''-E'-/ branch test
我已离开C'(此处为C''),因为C'与完全相同而不是C.
但是当ams评论时,如果你需要C'消失,你会
git rebase -i tmp
这样可以获得交互式 rebase,允许C'
完全删除,仅在E
上重播C
。
答案 1 :(得分:8)
你可以将你想要的作品重新加入C:
A---B---C-----D-- branch dev
\
C'-E-- branch test
# git rebase --onto [new base] [starting after this commit] [ending at this commit]
git rebase --onto C C' E
A---B---C-----D-- branch dev
\
E-- branch test
这与采摘樱桃的概念相同,只是test
分支指针与重新提交的提交一起移动。
(请注意,在rebase之后C'提交将无法访问,但您可以使用git reflog
返回它。)