2016-04-25 97 views
1

說我有我的分支Alabama,包含一組變化(在文件foobarhello),它是基於相對於develop和我有一個(新鮮)分支Boston也是基於develop,與開發相比沒有變化。SmartGit:合併的項目我排除/丟棄在先前的合併

Boston是我當前的本地分支,我將Alabama合併到我的工作樹中,但丟棄對foo的更改。我推,沒有衝突,做了一些其他的承諾,一切都很好。現在我決定我需要對foo進行這些更改:我試圖再次將Alabama合併到我的工作樹中,但對foo的更改未合併,因爲SmartGit似乎記得我決定不使用這些更改,現在自動丟棄他們對我來說。

foo更改爲Alabama的正確方法是什麼? ;-)

+0

看看這個:http://stackoverflow.com/questions/36727996/re-merging-after-selective-or-partial-merge/36728406#36728406 – user3159253

回答

1

清理問題的一種策略是rebaseBoston分支Alabama。考慮下面的圖:

Alabama: d <- A1 <- A2 
Boston: d <- M1 <- B1 <- B2 

這裏d提交處於develop分支一次提交(可能許多)。您可以看到AlabamaBoston都位於此常見歷史記錄之上。 A提交對應於Alabama分支,其中一個或多個分支包含您想要帶入Boston分支的文件foo的更改。 B提交對應於Boston分支。提交M1是合併提交,因爲您試圖合併AlabamaBoston,同時丟棄文件foo的更改。

如果變基AlabamaBoston分支,該圖將看起來像這樣算賬:

Alabama: d <- A1 <- A2 
Boston: d <- A1 <- A2 <- M1' <- B1' <- B2' 

下面是做到這一點的命令:

git checkout Boston 
git rebase Alabama 

在換句話說,您在Boston分支中所做的工作現在將位於Alabama之上,其中將包括對文件foo的更改。某些提交上的主要標記(例如B1')表明這些實際上是新的提交了Boston分支。此外,您可能會在重新綁定期間發生合併衝突。特別是,當您在Alabama之上重播M1提交時,會產生衝突,因爲這兩個提交都會有非常類似的更改。