Git

2011-03-13 23 views
21

ile birden çok dalın birleştirilmesi "develop" ve "master" adında 2 yerel depomuz var; Onlar benzer. Şirketimin sunucuda diğer geliştiriciler tarafından yapılmıştır 1 "ana" Repo (üretim) ve birkaç dal var: Ben yerel "ana" repo içine remotes/origin/feature1 ve remotes/origin/feature2 birleştirme nasılGit

 
$ git branch -a 
* develop 
    master 
    remotes/origin/HEAD -> origin/master 
    remotes/origin/some-test 
    remotes/origin/feature1 
    remotes/origin/feature2 
    remotes/origin/master 

, kopyalama "Tüm bunları geliştirin ve "geliştir" repo'mda gerçek kodla çalışmaya başlayın.

cevap

31
  1. git checkout master
  2. git pull origin feature1 feature2
  3. git checkout develop
  4. git pull . master (ya da belki git rebase ./master)

İlk komut değiştirir senin Geçerli şube master.

İkinci komut, uzaktaki feature1 ve feature2 dallarındaki değişiklikleri çeker. Bu bir "ahtapot" birleşmesidir, çünkü 2'den fazla dalı birleştirir. İsterseniz iki normal birleştirmeyi de yapabilirsiniz.

Üçüncü komut sizi develop şubenize geri döndürür.

Dördüncü komut, değişiklikleri yerel master'dan develop'a çeker.

Bu yardımcı olur umarım.

DÜZENLEME: git pull'un otomatik olarak fetch yapacağını unutmayın, bu nedenle el ile yapmanız gerekmez. git fetch ve git merge takip ediyor.

+1

Bu yöntemle yalnızca iki birleştirmeyi kullanarak ortaya çıkan fark nedir? Her üç branşta da anne-baba olarak tek bir birleşme taahhüdü mü alıyorsunuz? Ayrıca, eğer birleştirmeler temiz değilse, bu muhtemelen başarısız olacaktır. Yani bir 'git birleştirme feature1 feature2' her neyse gerekli olabilir .. – naught101

+0

Kendi sorumu cevaplamak için, her dalın başıyla bir ana (birleştirilmiş olan şube dahil) olarak tek bir taahhütte bulunursun. Eğer bir ya da daha fazla bireysel birleşme, hızlı ileriye doğru birleşirse, o zaman dalın başına bir dalın tarihinin içinde olduğu için, dalın başı bir ebeveyn olarak birleştirilmez. – naught101

+13

Bir çakışma varsa, birleştirme sadece 'Ahtapot yapmamalı 'mesajı ile başarısız olur. Bu açıkça, şimdiye kadarki en iyi hata mesajlarından biridir. – naught101

9

sadece "getir" olur kökenli hepsi:

git checkout master 

git merge origin/feature1 

git merge origin/feature2 

şimdi geliştirmek içine ana birleştirebilirsiniz: Eğer efendi içine dalları birleştirebilirsiniz sizin repo devam ettiği bu günlerde

git fetch origin 

git checkout develop 
git merge master 

geri sonra kurulum yerel izleme şube olur kökenli taahhüt gidiyoruz bu nedenle yerel erişim ve kökeni doğrudan itebilir:

git branch --track origin/feature1 feature1