“U” tam olarak ne yapar? "Git push -u origin master" vs "git push origin yöneticisi"


335

Anlamak için elimden gelenin en iyisini yapmaya rağmen, git'i kullanmakta korkunç gibiyim.

Gönderen kernel.org için git push:

-u

--set-yukan

Güncel veya başarıyla itilen her dal için, bağımsız değişken git-pull (1) ve diğer komutlar tarafından kullanılan yukarı akış (izleme) başvurusunu ekleyin. Daha fazla bilgi için, bkz branch.<name>.merge. Git-config (1).

İşte branch.<name>.mergeden git config:

branch.<name>.merge

branch.<name>.remoteBelirli bir dalın yukarı akış kolunu ile birlikte tanımlar . Git getirme / git çekmeyi hangi dalın birleştirileceğini söyler ve git itmeyi de etkileyebilir (bkz. Push.default). Dalında zaman <name>, varsayılan refspec getirme git söyler FETCH_HEAD birleştirilmesi için işaretlenecek. Değer, bir refspec öğesinin uzak kısmı gibi işlenir ve tarafından verilen uzaktan kumandadan getirilen bir ref ile eşleşmelidir "branch.<name>.remote". Birleştirme bilgileri, birleştirme için varsayılan dalı aramak için git pull (ilk başta git fetch'i çağırır) tarafından kullanılır. Bu seçenek olmadan, getirilen ilk refspec'i birleştirmek için git pull varsayılanları. Ahtapot birleştirme elde etmek için birden çok değer belirtin. Git pull'u <name>yerel depodaki başka bir daldan birleşecek şekilde ayarlamak isterseniz,branch.<name>.mergeistediğiniz dalı seçin ve özel ayarı kullanın. için bir süre branch.<name>.remote.

Başarılı bir şekilde github ile uzak bir depo oluşturdum ve ilk taahhüdümü başarıyla ittim:

git push -u origin master

Sonra, farkında olmadan başarıyla ikinci depom uzak depoma itti kullanarak:

git commit -m '[...]'

Ancak, yanlış düşünme ben tekrar itmek zorunda kalacak origindan master, Koştum:

# note: no -u
git push origin master

Bu ne yaptı? Hiç bir etkisi yoktu. "Geri aldım" git push -u origin mastermı?


45
I'm apparently terrible at using git, despite my best attempts to understand it.- Birisinin beni hiç bu kadar iyi yaratmamış olması.
dgo

Yanıtlar:


336

Anahtar "bağımsız değişken git-pull". Bir git pulldaldan bir kaynak uzaktan veya dal belirtmeden yaptığınızda git, branch.<name>.mergenereden çekileceğini bilmek için ayara bakar . git push -ubu bilgileri ittiğiniz dal için ayarlar.

Farkı görmek için yeni bir boş dal kullanalım:

$ git checkout -b test

İlk olarak, biz olmadan iteriz -u:

$ git push origin test
$ git pull
You asked me to pull without telling me which branch you
want to merge with, and 'branch.test.merge' in
your configuration file does not tell me, either. Please
specify which branch you want to use on the command line and
try again (e.g. 'git pull <repository> <refspec>').
See git-pull(1) for details.

If you often merge with the same branch, you may want to
use something like the following in your configuration file:

    [branch "test"]
    remote = <nickname>
    merge = <remote-ref>

    [remote "<nickname>"]
    url = <url>
    fetch = <refspec>

See git-config(1) for details.

Şimdi eklersek -u:

$ git push -u origin test
Branch test set up to track remote branch test from origin.
Everything up-to-date
$ git pull
Already up-to-date.

İzleme bilgilerinin, git pulluzaktan kumandayı veya dalı belirtmeden beklendiği gibi çalışması için ayarlandığını unutmayın .

Güncelleme: Bonus ipuçları:

  • Mark bir yorumda belirtildiği gibi, git pullbu ayara ek olarak, öğesinin varsayılan davranışını da etkiler git push. -uİzlemek istediğiniz uzak dalı yakalamak için kullanma alışkanlığınız varsa, push.defaultyapılandırma değerinizi ayarlamanız önerilir upstream.
  • git push -u <remote> HEADgeçerli dalı aynı adda bir şubeye gönderir <remote>(ve daha git pushsonra izleyebilmeniz için izleme de kurar ).

4
git push <remote> <branch>işleri açıklığa kavuşturur . Uzaktan kumandayı veya dalı bırakırsanız git, sizin için ayarlanan şube yapılandırma ayarlarına geri döner git push -u.
dahlbyk

2
@dahlbyk Devam ettim ve cevap olarak seni işaretledim, ama bu yorum beni biraz karıştırdı. Cevabınızda, git'in daha sonra karıştırıldığını gösterdiniz git push origin test(ki bu yok -u). Daha sonra bunun belirsizliği git push -u origin test ortadan kaldırdığını gösterdiniz . Bir yazım hatası var mı, yoksa tekrar yoğunlaşıyor muyum?
ClosureCowboy

1
Sanırım birbirimizi geçiyoruz. :) Açık git push <remote> <branch>dediğimde, git pushşube yapılandırmasına bağlı olanı görüyorum . Benzer şekilde, git pull <remote> <branch>açıktır ve git pulldal yapılandırmasına dayanır. Birlikte aktardıktan sonra -uhem git pushve git pullbeklendiği gibi çalışır.
dahlbyk

10
@dahlbyk: Cevabınız iyi, ancak yukarıdaki yorumlarınızla ilgili ortak bir yanlış anlama tekrarlıyorsunuz git push- push.defaultkendinizi ayarlamadığınız sürece , git pushgüncelleme yapmak için uzak dalı değil , yalnızca hangi uzaktan kumandayı zorlayacağınıza karar vermek için yukarı akış şube yapılandırmasını kullanır.
Mark Longair

1
Git için en iyi uygulama git push origin masterdiğer taraf IE ile aynıdır. git pull origin master.. Yani şube değiştirmek varsayalım o zaman yapabilirsiniz git push origin branch_nameve diğer taraf IE aynı. git pull origin branch_name
Arpit Vaishnav

87
git push -u origin master

… aynıdır:

git push origin master ; git branch --set-upstream master origin/master

Eğer son ifade, unutursanız yapın -u!

Veya zorlayabilirsiniz:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

Komutun sizin için yapmasına izin verirseniz, var olmayan bir dalı yazmışsınız ya da yapmamışsınız gibi hatalarınızı seçecektir git remote add; gerçi istediğin şey bu olabilir. :)


1
BTW mastersadece bir örnektir :)
sabgenton

Tamam şimdi ikinci bit daha yeni sürümlerde amortismana tabi git branch master -u origin/master
tutuldu

2
-uSeçeneği kullanmayı unutursanız git push -uhemen yazın.
zeekvfu

1
Git'in daha yeni sürümleri --setup-upstreamkullanımdan kaldırılacağını gösteriyor: The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
Bill Hoag

--set-upstream kullanımdan kaldırıldı, şimdi çalışıyor:git branch --set-upstream-to=origin/master master
Alberto Perez

43

Daha basit bir ifadeyle:

Teknik olarak, -ubayrak, itmekte olduğunuz yukarı akış sunucusuna bir izleme başvurusu ekler.

Burada önemli olan, git pulldaha fazla argüman sağlamadan bunu yapmanıza izin vermesidir. Örneğin, bir kez yaptıktan git push -u origin mastersonra daha sonra arayabilir git pullve git demek istediğinizi bilecektir git pull origin master.

Aksi takdirde, tüm komutu yazmanız gerekir.


1
Yani her sonraki çekime -ubayrak orgin masterkoyarsam buna değinir. Ve eğer git pulldavranışı değiştirmek istersem çalışmalıyım git push -u origin some_other_branchve git pullşimdi başvuracağım some_other_branch? Teşekkür ederim!
Toma Tomov

1
"git push origin master" yerine "git push" kullanabilir miyiz?
cegprakash

Evet, @cegprakash yapabilirsiniz. Ancak, başlangıçta birgit push -u origin master
19:24 tarihinde Adépòjù Olúwáségun

-11

Github'a itmek ve çekmek için gerekli tüm git bash komutları:

git status 
git pull
git add filefullpath

git commit -m "comments for checkin file" 
git push origin branch/master
git remote -v 
git log -2 

Bir dosyayı düzenlemek istiyorsanız:

edit filename.* 

Tüm şubeleri ve taahhütlerini görmek için:

git show-branch

4
Bence sorunun kapsamından çıktınız.
Adépòjù Olúwáségun
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.