2013-04-24 55 views
1

如果我開始一個結構上類似如下我的遙控器:如何在分支合併燙掌握

A-B-C-D-F-G master 
    \ 
    E-H-I branch 

我克隆分支,並改變「J」(&提交和推到遠程分支)我怎樣才能把'J'合併到主人而不用打倒'H'和'I'?只能通過推動'J'來完成,還是需要切換到本地回購跟蹤主數據庫,合併本地'J'更改並將其推送給主數據庫?

A-B-C-D-F-G-J master 
    \  
    E-H-I-J branch 

回答

2

要製作的歷史,反映現實,所以下游保存自己潛在的麻煩,

git checkout -b Jbranch B 
git cherry-pick J 
git checkout -B branch I 
git merge Jbranch 
git checkout -B master G 
git merge Jbranch 
git branch -d Jbranch 

生產

A..B..C..D..F..G..J'' master 
    |   /
    |\........J'.+ 
    |    \ 
    \....E..H..I..J branch 

的「J」承諾的樹在新老「分支」提示會與此次的明確歷史相同。

+0

任何想法爲什麼直接從分支到主人挑選J會導致我後來合併麻煩。合併能夠看到C-D-F-G-J和H-I-J有共同的J並且只合並H&I。大多數其他版本控制系統都這樣做,與Git有什麼不同? – BenG 2013-04-25 07:53:27

+1

這是一個純粹的安全遊戲,就像任何vcs git都可以識別櫻桃挑選一樣,因爲兩個提交應用了看起來相同的補丁,但任何可以檢測到類似情況的系統都可能被愚弄。 – jthill 2013-04-25 09:35:12

0

您可以cherry-pick更改J.櫻桃採摘只複製一個特定的提交到一個分支。

$ git checkout master 
$ git cherry-pick J 

請注意,提交J現在將被複制(它將存在於每個分支上)。