2013-08-14 16 views
10

Tek yönlü:İtme kolu ile usta birleştirme arasındaki fark nedir?

git checkout myBranch 
git push origin myBranch:master 

bir başka yolu:

git checkout master 
git merge myBranch 
git push 

Bu ikisi arasındaki fark nedir?

+1

Daha önemli bir soru: *** ne yapmaya çalışıyorsunuz ve neden? *** –

+0

Değişikliklerimi uzak ana biriminde birleştirmek istiyorum. Ancak uzak master'da bazı yeni taahhütler yazabileceğim herhangi bir risk olup olmadığını bilmiyorum. – Magicloud

+0

Git itme orijini myBranch: master 'durumunda, sadece + hızlı bir şekilde + + Ekle, artı + güncellemeye izin vermeyen + myBranch: master' gibi bir '+' eklemediğiniz sürece. Benzer şekilde, 'git-push 'sadece ileri-itmeli olmayan güncellemedir, sadece' -f 'kuvvet bayrağını geçmeyin. –

cevap

6

Bu:

git checkout myBranch 
git push origin myBranch:master 

sadece master için myBranch (diğer bir deyişle sigara zorunlu güncelleştirme) itme hızlı ileri yapmak için çalışır. master'a myBranch'dan ulaşılabilirse, yani master, myBranch'un sahip olmadığı herhangi bir taahhüt içermez, daha sonra itme başarılı olacaktır; aksi halde itiraz reddedilir. Eğer refspec myBranch:master kullandığınız beri

önceki git checkout myBranch

, git push ilgisi yoktur. Refspec'ler hakkında daha fazla bilgiyi Git Internals - The Refspec'dan edinebilirsiniz.

Bu:

git checkout master 
git merge myBranch 
git push 

aslında master içine myBranch birleştirir ve sonra uzak onu itmek için çalışır

(a Git repo varsayılan yapılandırma ile, uzaktan kökenli olacaktır). myBranch aslında master birleştirilir

Çünkü o zaman aksi takdirde başarısız olur, yerel bir zamanda yok, o zaman itme başarılı olacaktır taahhüt eder içermiyor yani uzaktan master, yerel birinin arkasında olduğunu varsayarak .

+0

Ancak, "git birleştirme" nin hala hızlı ileri bir birleştirme ile sonuçlanabileceğini unutmayın. Yani sonuç, ana, kök/master ve myBranch – knittl

+0

@ knittl arasındaki ilişkiye bağlı olarak aynı olabilir veya olmayabilir, 'git birleştirme myBranch' hızlı ileri olabilir. Ben de getirmedim, çünkü (1) hızlı ileri olduğunu söyleyebilirim. Sonra 'git push myBranch: master' ve' git push origin 'aynıdır. Ama sonra (2), diyelim ki "myBranch" ı birleştirmek hızlı değil. Bu noktada, kullanıcı 'itme kökeni myBranch: master' yaparsa, 'git itme kaynağı' ile sonuçlanan aynı güncelleştirmedir: her ikisi de uzak şubeyi hızlı ileri sar. Yani hala aynı. –

+0

@Cupcake Çok basit bir şekilde, hızlı ileriye gidip gelmesin, iki yolum aynı sonuç verir mi? – Magicloud

İlgili konular