结合GIT中合并分支的历史?

时间:2009-09-25 01:10:14

标签: git merge branch

在我的git存储库中,我将分支“B”合并为“master”,得到以下结构:

--> A --> B --> C --> D  (branch master)
    |           |  
    F --> G --> H        (branch B)

我现在想要结合分支来获得以下历史记录:

--> A --> B --> F --> G --> H --> D

我该怎么做?

此致 约亨

2 个答案:

答案 0 :(得分:6)

我认为C是合并提交,这就是您不希望在结果中使用它的原因。

您需要做的是git rebase

让我们从另一个原理图提交图开始。离开原件 分支完好无损我们将在一个名为rebasing

的新分支上运行
git checkout -b rebasing master

--> A --> B------------------- --> C --> D         (branch master) (branch rebasing)
     \                           /
      +----+->  F --> G --> H -+                   (branch topic)

topicrebasing之间的所有内容重新绑定到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时,我们有AD的直线形式。

-> A -> F -> G -> H -> B -> D                      (branch rebasing)

所以,现在唯一的问题可能是订单与订单不同 你期待的。如果您愿意,可以通过使用git rebase --interactive重新排序提交来轻松解决此问题。

或者你以一种稍微复杂的方式改变一切。让我们重新开始吧。

--> A --> B------------------- --> C --> D         (branch master) (branch rebasing)
     \                           /
      +----+->  F --> G --> H -+                   (branch topic)

首先从Cmaster(也称为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