Sadece tek bir Git dalını nasıl itersiniz (ve başka bir dal yoktur)?


247

Yerel git deposu üzerinde çalışıyorum. İki dalı vardır masterve feature_x.

feature_xUzak repoya itmek istiyorum , ancak masterdaldaki değişiklikleri itmek istemiyorum .

Will bir git push origin feature_xbenim gelen feature_xşube ( feature_xişin dalı zaten uzak üzerinde var)?

Bunu kutumda test etmek istemiyorum, çünkü şu anda ustalaşmak için zorlayamıyorum.


Buraya bir bakın: uzaktan ve burada: bir dalı github'a itin İşe yarayacak gibi geliyor.
al.

Yanıtlar:


376

evet, sadece aşağıdakileri yap

git checkout feature_x
git push origin feature_x

54
Modern git ile sadece "git push origin HEAD", hatta "git push HEAD" yazabilmeniz gerekir.
Jakub Narębski

2
Feature_x için ödeme yapmak gerekli mi?
hd.

5
evet, çünkü master kullanıyorsanız, yerel master şubeyi uzak feature_x şubesine aktarmaya çalışır. önce ödeme yapmak zorunda kalmazsınız "git push origin feature_x: feature_x"
cpjolicoeur

1
@cpjolicoeur Diğer sorularda gördüm (örneğin: burada ) yapıyorlar git push -u origin <branch-name>. Ancak bundan bahsetmediniz. Bu gerekli mi ?
riroo

3
@miss_R -uBir komuttaki seçenek, git-pushyeni itilen dalı izlemek için yukarı akış referansını ayarlar. Bu git-pull, gelecekte o dalda olduğu gibi şeyleri belirtmeden hangi daldan çekileceğini zaten bilecektir. Tek bir kolu itmek için bir seçenek olarak gerekli değildir, ancak yaygın olarak kullanılır, çünkü birçok insan yerel şubeyi ittikleri uzak dalı takip etmek istemektedir.
cpjolicoeur

74

Varsayılan olarak git pushtüm uzak dalları günceller. Ancak git'i yalnızca geçerli dalı yukarı akışına güncelleyecek şekilde yapılandırabilirsiniz.

git config push.default upstream

Yani git push yaptığınızda git sadece mevcut (teslim alınmış) dalı güncelleyecektir.

Diğer geçerli seçenekler:

  • nothing: Açıkça bir refspec verilmedikçe hiçbir şeyi (hata çıktısını ) zorlamayın . Bu öncelikle hatalardan daima açık olarak kaçınmak isteyen insanlar içindir.
  • matching: Her iki ucunda aynı ada sahip tüm dalları itin . (Ver 1.7.11 öncesi varsayılan seçenek)
  • upstream: Geçerli dalı yukarı doğru şubesine doğru itin. Bu mod, yalnızca normalde çektiğiniz depoya (yani merkezi iş akışı ) aktarıyorsanız anlamlıdır . Yerel ve uzak şube için aynı ada sahip olmanıza gerek yoktur .
  • tracking: Kullanımdan kaldırıldı, upstreambunun yerine kullanın.
  • current: Geçerli dalı , alıcı uçtaki aynı adlı uzak şubeye doğru itin . Hem merkezi hem de merkezi olmayan iş akışlarında çalışır.
  • simple: [Ver 1.7.11'den beri mevcuttur] merkezi iş akışında, upstreamyukarı akış kolunun adı yerel olandan farklıysa, itmeyi reddetmek için ek bir güvenlikle çalışın . Normalde çektiğiniz uzaktan kumandadan farklı bir uzaktan kumandayı iterken, olarak çalışın current. Bu en güvenli seçenektir ve yeni başlayanlar için uygundur. Bu mod Git 2.0'da varsayılan haline gelmiştir.

2
Teşekkürler, currentaradığım şey buydu git push, foodalda varsayılan olarak şubeye itecek origin/foo.
Dorian

@Dorian teşekkürler, currentvarsayılan olarak daha anlamlı olduğunu kabul ediyorum .
Zoltán

@Dorian, @ Zoltán - simpleVarsayılan olarak daha mantıklı hissediyorum . Cevabı 'ne zaman kullanılacağı' ile güncelledim. Pls bir göz atın.
Karthik Bose

1
Not: git sürüm 2'den beri varsayılan değer olarak değiştirilmiştir simple.
Danijel

8

Karthik Bose'un cevabının üstünde küçük bir güncelleme - git global olarak tüm çalışma alanlarınızı bu şekilde davranacak şekilde yapılandırabilirsiniz:

git config --global push.default upstream

upstream benim için geçerli bir ayar olarak tanınmadı, bunun yerine 'akım' koymak zorunda kaldı
çekirge

-2

Diyelim ki yerel bir şube foo, başlangıç ​​adı verilen bir uzak ve uzak şube başlangıç ​​/ master var.

Foo'nun içeriğini orijin / master'a itmek için önce akışını ayarlamanız gerekir:

git checkout foo
git branch -u origin/master

Daha sonra bu şubeyi kullanarak şunları yapabilirsiniz:

git push origin HEAD:master

Son komutta, orijin / master'ın tüm tarihini foo'nun yerine değiştirmek için --force ekleyebilirsiniz.

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.