2013-11-20 19 views
243

dmgr2 (geliştirme) adında bir şubem var ve ana daldan (canlı site) yararlanmak ve tüm değişiklikleri geliştirme şubeme dahil etmek istiyorum. Bunu yapmanın daha iyi bir yolu var mı?git Master'ı geliştirme şubesine çekin

git checkout dmgr2 
git pull origin master 

bu benim geliştirme dalı haline canlı değişiklikler çekin veya gerektiği bu yanlış var: Burada yaptığımı geçenleri planlıyordu edilir?

+1

ilk önce tüm değişikliklerinizi dmgr2 dalında yapın. ve ardından 1.git kontrol master'ı ana sayfasına yönlendirin ve en son değişikliği yapın. 2.git çekin dtgr2 4.git push -u orijin ustası Ve sonra dmgr2'ye geri dönün 5.git checkout dmgr2 –

+0

Ben zaten tüm değişiklikleri benim dmgr2 dalına taahhüt ettim, eğer adım 4'ü gerçekleştirirsem –

+0

'u eklediğimi unuttum. Bunu yapmak istemiyorum –

cevap

360

sen çalışacak verilen adımların, ama daha fazla seçenek bulunur uzun bir yol var:

git checkout dmgr2  # gets you "on branch dmgr2" 
git fetch origin  # gets you up to date with origin 
git merge origin/master 

fetch komut merge önce herhangi bir noktada yapılabilir, yani sen sırasını değiştirebilirsiniz getirme ve ödeme, çünkü fetch sadece adlandırılmış uzaktan kumandaya (origin) gider ve ona şunu söyler: "sahip olmadığın her şeyi bana ver", yani, tüm dallarda tüm taahhütler. Havuzunuza kopyalanırlar, ancak uzaktan kumandada branch adında herhangi bir şube için origin/branch olarak adlandırılır.

Bu noktada, "sahip olduklarınızı" görmediğiniz herhangi bir görüntüleyiciyi (git log, gitk, vb.) Kullanabilirsiniz ve bunun tersi de geçerlidir. Bazen bu sadece Sıcak Bulanık Duygular için yararlıdır ("ah, evet, aslında istediğim") ve bazen stratejileri tamamen değiştirmek için yararlıdır ("whoa, henüz bu tür şeyleri istemiyorum").

Son olarak, merge komutu origin/master olarak adlandırabilir, hangi verilen taahhüt alır ve bunu merge çalıştırdığınızda üzerinde her neysen dal, yani taahhüt ve atalarından getirmek için ne gerekiyorsa yapar. Hızlı ileri sarmayı önlemek için --no-ff veya --ff-only ekleyebilir veya yalnızca sonuç hızlı ileri sarılırsa birleştirebilirsiniz. Eğer diziyi kullandığınızda

:

git checkout dmgr2 
git pull origin master 

pull komut talimatını git git fetch çalıştırmak için, ve git merge origin/master sonra ahlaki eşdeğeri. Yani bu, iki adımı el ile yaptığınız gibi, neredeyse ile aynıdır, ancak muhtemelen size çok ilgili olmayan bazı ince farklılıklar vardır. (Özellikle pull tarafından işletilen fetch adım sadeceorigin/master getiriyor ve senin repo ref güncelleme değildir: 1 herhangi bir yeni kaydedilmesini rüzgarlar sevk-yalnızca özel FETCH_HEAD referans olarak.)

Eğer git fetch origin daha-açık kullanırsanız (daha sonra isteğe bağlı etrafa bakmak) ve daha sonra git merge origin/master dizisi, ayrıca ağ üzerinden tek fetch vadede ile, uzaktan kumanda ile güncel kendi yerel master getirebilir:

git fetch origin 
git checkout master 
git merge --ff-only origin/master 
git checkout dmgr2 
git merge --no-ff origin/master 

Örneğin.


Bu ikinci kısım değiştirildi-ı olmuştur demek şimdi fırsatçı "uzak şube" referanslar günceller "sabit" -in git 1.8.4. (Sürüm notlarının da belirttiği gibi, güncellemeyi atlamak için kasıtlı bir tasarım kararı vardı, ancak daha fazla insanın bunu güncellemeyi tercih ettiği ortaya çıkıyor.Eski uzak şube SHA-1'ini isterseniz, varsayılan olarak reflog'a kaydedilir ve bu nedenle geri yüklenebilir. Bu aynı zamanda yukarı akış yönlendirme bulmak için yeni bir git 1.9/2.0 özelliği sağlar.)

+12

Sadece bir arkadaşım için soruyorum - burada sahip olduğunuz ilk kod bloğunu (checkout/fetch/merge) çözmeyi nasıl başardınız? –

+4

@RichBradshaw: 'git checkout 'normalde tahribatsızdır ve normalde' git getirme' işlemini geri almak için bir neden yoktur, bu yüzden birleştirme işlemini nasıl geri alacağınızı soruyormuş gibi geliyor. Cevap diğer taahhütler ile aynıdır: ya 'reset 'veya' git revert'. * Basılmamış * değişiklikler için 'git reset 'genellikle en iyi yöntemdir; Başkalarının sahip olduğu değişiklikler için, 'git revert' daha iyi olabilir, ancak Linus Torvald'ın birleştirme işlemini geri almayla ilgili tavsiyesine bakın: https://www.kernel.org/pub/software/scm/git/docs/howto/revert-a- Hata-merge.txt – torek

+0

Hangi birleştirme görüntüleyici programının kullanılacağını nasıl belirlersiniz? – PositiveGuy

İlgili konular