2012-02-17 125 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