在我的git倉庫,我已經合併分支「B」到「主人」,得到如下結構:在GIT中合併分支機構的歷史記錄?
--> A --> B --> C --> D (branch master)
| |
F --> G --> H (branch B)
我現在想的樹枝相結合,得到下面的歷史:
--> A --> B --> F --> G --> H --> D
我該怎麼做?
問候, 約亨
在我的git倉庫,我已經合併分支「B」到「主人」,得到如下結構:在GIT中合併分支機構的歷史記錄?
--> A --> B --> C --> D (branch master)
| |
F --> G --> H (branch B)
我現在想的樹枝相結合,得到下面的歷史:
--> A --> B --> F --> G --> H --> D
我該怎麼做?
問候, 約亨
我認爲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
尖端,並把它放在 尖端的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)
我會從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