Yerel bir Git dalını farklı bir ada sahip bir uzaktan kumandaya nasıl kolayca itebilirim?


175

Her iki adı da belirtmeden, farklı bir ada sahip uzak bir şubeye sahip yerel bir dalı itmenin ve çekmenin kolay bir yolu olup olmadığını merak ediyorum.

Örneğin:

$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name

Birisi remote_branch_name'i güncellerse, şunları yapabilirim:

$ git pull

Ve her şey birleştirilir / hızlı ilerletilir. Ancak, yerel "yeni" benim değişiklik yaparsanız, yapamam:

$ git push

Bunun yerine:

% git push origin newb:remote_branch_name

Biraz aptalca görünüyor. Eğer git-pullkullanımları git-config branch.newb.mergeyerden çekmeye belirlemek için, neden olamazdı git-pushbenzer yapılandırma seçeneği var? Bunun için güzel bir kısayol var mı yoksa uzun yoldan devam etmeli miyim?

Yanıtlar:


93

Elbette. Sadece set push.defaultetmek upstream(yani aynı olan kendi upstreams için zorlamaya dalları pullile tanımlanan, çekinir branch.newb.mergeyerine (varsayılan ayar olan isim eşleşen olanlara şube iterek yerine,) push.default, matching).

git config push.default upstream

Bunun Git 1.7.4.2'den önce çağrılmadığına trackingdikkat upstreamedin, bu nedenle Git'in eski bir sürümünü kullanıyorsanız trackingbunun yerine kullanın. push.defaultSeçenek daha eski bir sürümünü kullanıyor eğer öyleyse, hiç bu seçeneği olmaz ve açıkça karşı itmek için şube belirtmek gerekir, Git 1.6.4 eklendi.


Hepsi bu kadar! Bu, izleyen tüm şubeler için geçerlidir, ancak sorun yoktur. Teşekkürler!
jmacdonagh

Teslim aldığım şube adı için bir kısayol olup olmadığını bilmek isterim. Sadece isteyebilirsiniz git push buildserver .:test_thisnerede .ben ille bilmiyorum yerel şube adı olacaktır. Bakabilirim, elbette, ama nokta gibi kısa bir el olsaydı, bunun için havalı olurdu.
Frederick Nord

2
@FrederickNord HEADaradığınız stenondur . HEADşu anda teslim alınmış şubeyi veya müstakil bir başınız varsa doğrudan belirli bir taahhüdü işaret eder.
Brian Campbell

Teşekkürler! Bu Updates were rejected because a pushed branch tip is behind its remotebenim için hatayı düzeltti . Yerel repo'm günceldi, ama isimler sadece farklıydı.
canhazbits

171

İlk push işlemini yaptığınızda -u parametresini ekleyin :

git push -u origin my_branch:remote_branch

Sonraki itmeler istediğiniz yere gider.

DÜZENLE:

Yoruma göre, bu sadece çekme ayarlar.

git branch --set-upstream

yapmalı.


7
-usadece soruya göre önceden ayarlanmış olan akış yukarı ayarlar. O sete ihtiyacı push.defaultiçin upstremalmak için pushvarsayılan olarak yalnızca bu yana, yukarı ayarı saygı pullyok.
Brian Campbell

2
Bu işe yaramıyor gibi görünüyor - en azından git'in asla versiyonlarında değil
Thomas Watson

git branch --set-upstream yalnızca "pushRemote" çekme ayarının bundan sonra ayarlanması gerekir.
wheredidthatnamecome14

Bence git branch --set-upstreamgerekli değil . Not: benim git --version2.17.1.
Gabriel Staples

15

Adam'ın emri artık reddedildi. Kullanabilirsiniz:

git branch --set-upstream-to origin/my_remote_branch my_local_branch

öğesinin yukarı akış dalını ayarlamak my_local_branchiçin origin/my_remote_branch.


6
Kullanım dışı bırakılmayla ilgili paylaştığınız bilgileri destekleyen bir bağlantı sağlayabilir misiniz? Git-scm.com adresindeki push ile ilgili en son sürümün dokümanları güncel olduğunu gösteriyor. Şimdiden teşekkürler - daha fazla bilgi için okuyucuları takip etmek çok yararlı olabilir.
Kay V

@KayV ile hemfikirim, özellikle yerel şubemden farklı bir adla yeni bir uzak şube oluşturmaya çalışırken bu mesajı aldım: 'Uzaktaki muadilini izleyecek yeni bir yerel şube çıkarmayı planlıyorsanız, yukarı gitme yapılandırmasını ayarlamak için "git push -u" işlevini kullanın. '
FBB

0

İşte benim için işe yarayan süreç.

git clone original-repo-url
git remote rename origin upstream
git remote add origin new-repo-url

Şimdi yeni repo'nuz 'orijin' olacak ve orijinal repo 'akış yukarı' olacak. Git remote -v komutunu çalıştırarak onaylayın. (Yan not: Yukarı akış, orijinal repodan almak için kullanılır - yerel kopyanızı katkıda bulunmak istediğiniz projeyle senkronize tutmak için - ve kendi repolarınıza katkıda bulunabileceğiniz için kaynak çekmek ve itmek için kullanılır).

git push origin master

Şimdi yeni uzaktan repo ustanız (Github'da) orijinal master ile senkronize olacak, ancak özellik dallarından hiçbirine sahip olmayacak.

git rebase upstream/branch-name
git push origin master

Rebase akıllı bir birleşmedir. Ardından tekrar master'a basın; seçilen özellik dalını yeni repoda master olarak görürsünüz.

İsteğe bağlı:

git remote rm upstream
git remote add upstream new-repo-url

0

Bir süredir aynı konuya giriyorum. Sonunda bir dizi ifadem var, bu yüzden git push origin local:remoteher seferinde yapmak zorunda değilim . Bunları takip ettim:

git branch --set-upstream-to origin/remote_branch_name
git config push.default upstream
git push

Farklı bir adla (1. satır) uzak bir dalın yukarı akışını ayarladıktan ve sonra varsayılan olarak (2. satır) yukarı akış yaptıktan sonra, 3. satır şimdi bu kurallara uyacak ve set yukarı akışına itecektir.

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.