git belirli şubeye it


106

Şu soruyu okuduktan sonra bile: git-push-current-branch , git push komutumu nasıl yazmam gerektiğini anlamakta hala zorluk çekiyorum. Soru bağlantısında belirtildiği gibi, belgelerden net değil.

'Gerçek dünya' örneğimi kullanmak istiyorum. Dalımın git statusen üst seviyesinde bir komut verdiğimde gördüğüm şey şu:

Şubede amd_qlp_tester

Şubeniz 5 kayıt farkla 'origin / amd_qlp_tester'in önünde.

vb...

Yani benim şube adım amd_qlp_testerama ana daldan "dallanmış" (yanlış terimleri kullanıyorsam, SVN geçmişim yüzünden). Ama bir de ʻorigin / amd_qlp_testser 'adı var

Peki push komutumu nasıl ifade ederim?

Aşağıdakilerden herhangi biri:

git push origin/amd_qlp_tester
git push origin amd_qlp_tester
git push amd_qlp_tester
git push origin
git push

Yanıtlar:


94

git push origin amd_qlp_testersenin için çalışacak. Yalnızca yazarsanız git push, geçerli dalın uzak değeri varsayılan değerdir.

Push sözdizimi şuna benzer - git push <remote> <branch>. Uzaktan kumandanıza .git/configdosyaya bakarsanız, [remote "origin"]arşivin url'sini belirten bir giriş görürsünüz . Yani, komutun ilk bölümünde Git'e bu proje için depoyu nerede bulacağını söyleyeceksiniz ve sonra sadece bir dal belirteceksiniz.


Bunun için teşekkürler :), dit durum açıklaması onu bir yol olarak gösterdiğinde neden iki ayrı "kelime" olduklarını açıklayabilir misiniz, yani neden öyle origin amd_qlp_testserve değilorigin/amd_qlp_tester
code_fodder

Varsayılan "uzak", geçerli dalın yapılandırmasına dayanır (bu durumda gerçekten de öyle olacaktır origin). Varsayılanları (git'in mevcut sürümlerinde) :ayarlanmadıysa, bu matching, gelecekte değişmesi gerektiği anlamına gelir .
torek

Biraz kafam karıştı, v2.10 kullanıyorum, yazdığımda, git pushsizin söylediklerinizin aksine, izlenen tüm dalları itmeye çalışır ("geçerli dalın uzaktan kumandası varsayılan değerdir").
Roberto

Git 2.x, simplesadece mevcut dalı itecek anlamına gelen push stratejisini kullanmalıdır . blogs.atlassian.com/2014/06/happened-git-2-0-full-goodies
Petr Mensik

fatal: Couldn't find remote ref branch-name-here
doug65536

121

Yerel şubeniz ve uzak şubeniz aynı addaysa, bunu yapabilirsiniz:

git push origin branchName

Yerel ve uzak şube adınız farklı olduğunda, bunu yapabilirsiniz:

git push origin localBranchName:remoteBranchName

Bu çok yardımcı oldu, bulması zor :)
Pe Dro

Evet, haklısın, hatırlaması da zor!
Imranmadbar

8

Bağlandığınız söz konusu yanıtların tümü git'i yapılandırmakla ilgilidir, böylece çok kısa git pushkomutlar girebilir ve istediğinizi yapmalarını sağlayabilirsiniz. Hangisi harika, eğer ne istediğinizi ve bunu Git-Ese'de nasıl heceleyeceğinizi biliyorsanız, ama gitmeye yenisiniz! :-)

Sizin durumunuzda, Petr Mensik'in cevabı (iyi, "a") doğru olanıdır. İşte nedeni:

Komut , adlandırılmış "uzak" ı (örneğin, ) bulmak için dosyanızın etrafında kökleşir . Yapılandırma dosyası şunları listeler:git push remote.git/configorigin

  • bu uzak "yaşıyor" (ör. ) nerede (URL açısından )ssh://hostname/path
  • farklıysa nereye itiyor
  • hangi dal (lar) ı iteceğinizi söylemediyseniz ne itilir
  • koştuğunda ne getirilir git fetch remote

Depoyu ilk klonladığınızda - her ne zaman öyleyse - git bunlardan bazıları için varsayılan değerleri ayarlayın. URL kümesi veya ayarlanmadan, tüm "makul" varsayılan ... ya, hmm eğer, klonlanmış ve gerisi odur vardır onlar?

Bunlarla ilgili sorun, insanların zamanla neyin "makul" olduğu konusunda fikirlerini değiştirmeleridir. Şimdi (git sürümünüze ve her şeyi ayrıntılı olarak yapılandırıp yapılandırmadığınıza bağlı olarak) git, gelecekte değişen varsayılanlar hakkında birçok uyarı yazdırabilir. "Basılacak dal" adının eklenmesi - amd_qlp_tester- (1) onu kapatır ve (2) yalnızca o dalı iter.

Daha rahat itmek istiyorsanız, bunu şununla yapabilirsiniz:

git push origin

ya da:

git push

ancak bunun istediğiniz şeyi yapıp yapmayacağı, orijinal varsayılanların makul olduğu konusunda "erken git yazarları" ile veya orijinal varsayılanların makul olmadığı "daha sonraki git yazarları" ile hemfikir olup olmadığınıza bağlıdır. Bu nedenle, tüm yapılandırma işlerini (sonunda) yapmak istediğinizde, bağlantı kurduğunuz soruya (ve yanıtlara) bakın.

origin/amd_qlp_testerİlk etapta isme gelince : bu aslında yerel bir varlıktır (deponuzda saklanan bir isim), buna "uzak şube" denmesine rağmen. Git'in " amd_qlp_testerorada nerede" olduğuna dair en iyi tahminidir . Git yapabildiği zaman günceller .


1
Açıklama için teşekkürler, sanırım şimdi anladım. Kesin git push origin amd_qlp_tester
olmaktan

2

Güncellenmiş bir cevap eklemek istiyorum - şimdi bir süredir git kullanıyorum, herhangi bir itme yapmak için aşağıdaki komutları kullandığımı görüyorum (örnek olarak orijinal soruyu kullanarak):

  • git push origin amd_qlp_tester- çağrılan originuzak dalda çağrılan uzaktaki şubeye itin amd_qlp_tester.
  • git push -u origin amd_qlp_tester- sonuncusuyla aynıdır, ancak yukarı akışı yerel şubeyi uzak şubeye bağlayarak ayarlar, böylece bir dahaki sefere yalnızca bağlanmamışsa kullanabilirsiniz git push/pull(yalnızca bir kez yapmanız gerekir).
  • git push - Yukarı akışı ayarladıktan sonra, bu daha kısa sürümü kullanabilirsiniz.

Not -u seçeneği kısa versiyonudur --set-upstream- aynıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.