git更改分支的起源(rebase)

时间:2012-06-11 08:52:32

标签: git branch rebase

我有以下几点:

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,如果不可能

2 个答案:

答案 0 :(得分:10)

您可以在临时分支(由C制成)上重新定位 请参阅git rebaseRebasing以及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返回它。)