2012-02-17 121 views
1

我有以下結構:更改源提交

A-B-C-D (branch-C) 
    \ \ 
    \ H (branch-A) 
    \ 
    \-E-F-G (branch-B) 

我想是這樣的:

A-B-C-D (branch-A and branch-C) 
    \  
    \  
    \ 
    \-E-F-G-H (branch-B) 

我該怎麼辦呢?

+1

我冒昧地爲你貼了幾個分支;這會幫助答案變得更好。 – Cascabel 2012-02-17 04:52:21

+0

添加分支C使其更好:) – 2012-02-17 09:21:24

回答

3

假設你有分支-B簽出:

git cherry-pick branch-A 
git push . branch-C:branch-A -f 

您現在可以刪除任一分支-A或分支機構-C選擇 - 或者只是保持兩者。

+0

沒有分支名稱,這並不是很有用 - 很有可能OP將最終移動他不支持的分支不想。也許給在G和H開始的分支提供名字? – Cascabel 2012-02-17 04:43:10

+0

乾杯。補充說。 – 2012-02-17 04:59:05

+0

這將移動分支A,您將「失去」B-C-D。他們仍然在那裏,但不會有分支指向他們。 – Cascabel 2012-02-17 05:02:12

1
git checkout branch-B 
git cherry-pick branch-A # you could also specify H directly 

現在你有ħ頂上G.

從含有A-B-C-d的分支
git checkout branch-A 
git reset --hard HEAD^ # you could also specify D directly 
          # HEAD is the current commit; HEAD^ is the previous one 

現在已經移除小時。

請注意,這隻有在分支引用指向H和G時纔有意義,因爲git中的提交對象合併了它的祖先; 「移動」提交併不意味着它改變了你的分支。

+0

對於OP:將G和H替換爲在這些提交中開始的分支。 (這就是Borealid在最後一段中的看法,但我認爲這樣做會更清楚一些。) – Cascabel 2012-02-17 04:40:47