git更改分支的起源(rebase)

9 git branch rebase

我有以下几点:

A---B---C-----D--   branch dev
     \--C'-E-/      branch test
Run Code Online (Sandbox Code Playgroud)

我做得很糟糕:C和C'几乎是相同的提交,如果我可以在C上进行分支测试,而不是B ,那就更有意义了.

我怎么能这样做?,我想反驳,但我不知道如何使用它,thx

编辑:我不清楚我想要什么:

A---B---C-----D--   branch dev
         \-E-/      branch test
Run Code Online (Sandbox Code Playgroud)

要么

A - B - D - E - D如果不可能

Von*_*onC 10

你可以在一个临时分支(来自C)
See 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
Run Code Online (Sandbox Code Playgroud)

那应该给你:

A---B---C-----D--       branch dev
         \--C''-E'-/      branch test
Run Code Online (Sandbox Code Playgroud)

我离开C'(这里是C'')因为C' 与C不完全相同
但是作为ams评论,如果你需要C'消失,你会

git rebase -i tmp
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个交互式的 rebase,允许C'完全删除,只E在顶部重放C.


ell*_*eth 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
Run Code Online (Sandbox Code Playgroud)

这与采摘樱桃的概念相同,除了test分支指针与重新提交的提交一起移动.

(请注意,在rebase之后,C'提交将无法访问,但您可以使用它返回git reflog.)