在我的git存储库中,我将分支“B”合并为“master”,得到以下结构:
--> A --> B --> C --> D (branch master)
| |
F --> G --> H (branch B)
我现在想要结合分支来获得以下历史记录:
--> A --> B --> F --> G --> H --> D
我该怎么做?
此致 约亨
答案 0 :(得分:6)
我认为C
是合并提交,这就是您不希望在结果中使用它的原因。
您需要做的是git rebase
让我们从另一个原理图提交图开始。离开原件
分支完好无损我们将在一个名为rebasing
git checkout -b rebasing master
--> A --> B------------------- --> C --> D (branch master) (branch rebasing)
\ /
+----+-> F --> G --> H -+ (branch topic)
将topic
和rebasing
之间的所有内容重新绑定到topic
。
git rebase --onto topic topic rebasing
或使用较短的命令
执行相同的操作git rebase topic
-> A -> B -----------------> C -> D (branch master)
\ /
+---+> F -> G -> H + (branch topic)
\
+---------> B -> D (branch rebasing)
现在,当我们看rebasing
时,我们有A
到D
的直线形式。
-> A -> F -> G -> H -> B -> D (branch rebasing)
所以,现在唯一的问题可能是订单与订单不同
你期待的。如果您愿意,可以通过使用git rebase
--interactive
重新排序提交来轻松解决此问题。
或者你以一种稍微复杂的方式改变一切。让我们重新开始吧。
--> A --> B------------------- --> C --> D (branch master) (branch rebasing)
\ /
+----+-> F --> G --> H -+ (branch topic)
首先从C
到master
(也称为D
)的小费,然后将其放在
提示topic
(又名。H
):
git rebase --onto topic C master
-> A -> B ----------------> C -> D (branch master)
\ /
+----> F -> G -> H + (branch topic)
\
+---------> D (branch rebasing)
最后一个最后一个,我们完成了。
git rebase B
+----> F -> G -> H + (branch topic)
/ \
-> A -> B ----------------> C -> D (branch master)
\
+------------------------> F -> G -> H -> D (branch rebasing)
瞧!
-> A -> B -> F -> G -> H -> D (branch rebasing)
答案 1 :(得分:1)
我会从A分支,然后在您想要的提交中挑选樱桃
这样:
git checkout -b my-branch A
git cherry-pick B
git cherry-pick F
git cherry-pick G
git cherry-pick H
git cherry-pick D