2016-07-27 27 views
5

Sadece birleştirme işleminde, iki git dalında birleştirmeyi, bunları birleştirmeden çözmenin bir yolu varsa, bilmek istiyorum.git: Birleştirme gerçekleştirmeden birleştirme çakışmalarını çözme

Kabul ediyorum, bir şubem var "featureMy"; meslektaşım başka bir şube yarattı "featureHis". Her iki şube de "master" dalında yaratılır.

Meslektaşım daha sonra "featureHis" dalında master'a birleştirme isteği oluşturdu. Daha sonra "featureMy" adlı birleştirme isteğimi master'e oluşturduğumda, "featureHis" öğesinin birleştirilmesinden sonra master ile çakışmayacağından emin olmak isterim.

Genellikle "featureHis" i daha önce "featureMy" ile birleştiririm. Ancak, bu tatmin edici değil, çünkü "gürültü" olarak ek bir birleşme taahhüdüm var ve birleştirme isteğim "featureHis" 'den değişiklikler içerecektir.

Birleştirme işlemi oluşturmadan, birleştirme çakışmaları çözebilmem için bir yol var mı?

Tür birleştirilmesi yerine rebasing kullanmaktır taahhüt sahip birleştirme önlemek için

+0

Bir çakışma olup olmayacağını görmek isterseniz 'no-commit' yapabilirsiniz. http://stackoverflow.com/a/501461/3000179 –

cevap

5

Bir standart bir yol görüyor.

master:  A 
featureMy: A -- B 
featureHis: A -- C 

sadece bu iki dal biriniz ilk master ile birleşecek, sonra master gelen mevcut olmaması büyük varsayarsak: Şu senaryoyu inceleyin. Diyelim ki önce oraya giden meslektaşın. Sonra diyagramı şu şekilde görünecektir: en taahhüt

master:  A -- C 
featureMy: A -- B 
featureHis: A -- C 

Arkadaşınız master dalında şimdi. Şimdi birleştirme tabanlı iş akışı kullanırsanız, ilk olarak master'u şubenize birleştirirsiniz ve ardından şubenizi master'a birleştirirsiniz.

master:  A -- C -- E 
featureMy: A -- B -- D 
featureHis: A -- C 

Şimdi hem şube vemaster dalı çirkin birleştirme onlara taahhüt var: Bu yol açacaktır.

master:  A -- C 
featureMy: A -- C -- B' (B' indicates that this a new commit, not B) 
featureHis: A -- C 

Şimdi şube featureMy aslında master şube önde şudur: olsaydı Ancak master üzerinde şubenize rebased, size kalan olacaktır. İşleminizi, hiçbir çakışma olmadan, doğrudan master'un üstüne itebilirsiniz. Bu aşağıdaki şemada sonuçlanır: hayır birleştirme yerde taahhüt vardır

master:  A -- C -- B' 
featureMy: A -- C -- B' 
featureHis: A -- C 

Bildirim söyledi. Aslında, hem featureMy şubeniz hem de master, özdeş doğrusal geçmişlerini içerir.

Yaşasın git rebase.

+0

Mevcut iş akışını takip edebilmek için ilk olarak 'featureMy' dalını 'featureHis' üzerine yeniden kaydetmeli ve çakışmaları çözmeliyiz. "FeatureHis" dalının "master" ile birleştirilmesinden sonra, "master" üzerine "master" üzerine yeniden basabilir ve "master" ile birleşebilir. – geoji

İlgili konular