2009-09-25 102 views
2

在我的git倉庫,我已經合併分支「B」到「主人」,得到如下結構:在GIT中合併分支機構的歷史記錄?

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

我現在想的樹枝相結合,得到下面的歷史:

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

我該怎麼做?

問候, 約亨

回答

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尖端,並把它放在 尖端的topic(又名D。)(又名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

我會從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 
相關問題