Apa yang dimaksud dengan git push -u?

323

Saya memiliki dua versi git yang berbeda. Dalam versi 1.6.2, git pushtidak memiliki -uopsi. Ini hanya muncul dalam versi 1.7.x.

Dari dokumen, -uterkait dengan variabel

branch.<name>.merge

di git config. Variabel ini dijelaskan di bawah ini:

Defines, together with branch.<name>.remote, the upstream branch 
for the given branch. It tells git fetch/git pull which branch to merge.

Apa itu cabang hulu?

Frankie Ribery
sumber

Jawaban:

360

"Hulu" akan merujuk ke repo utama yang akan ditarik orang lain, misalnya repo GitHub Anda. Opsi -u secara otomatis mengatur upstream itu untuk Anda, menghubungkan repo Anda ke yang sentral. Dengan begitu, di masa depan, Git "tahu" ke mana Anda ingin mendorong dan ke mana Anda ingin menariknya, sehingga Anda dapat menggunakan git pullatau git pushtanpa argumen. Sedikit kecewa, artikel ini menjelaskan dan menunjukkan konsep ini.

Rafe Kettler
sumber
19
Saya melihat bahwa artikel yang Anda tautkan memang menunjukkan hal ini, tetapi karena ini adalah sesuatu yang bersifat gotcha, saya pikir ada baiknya menunjukkan bahwa cabang yang didorong dengan git push tidak terpengaruh oleh konfigurasi cabang hulu kecuali jika Anda telah push.defaultmenetapkan ke tracking(atau upstreamdalam versi git yang lebih baru).
Mark Longair
saya tidak mengerti mengapa gerhana misalnya menawarkan keduanya?
HaveAGuess
23
@HaveAGuess Mungkin karena alasan yang sama Eclipse juga menawarkan kesengsaraan dan keputusasaan.
twiz
9

Ini tidak lagi terkini!

Push.default is unset; its implicit value has changed in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the traditional behavior, use:

  git config --global push.default matching

To squelch this message and adopt the new behavior now, use:

  git config --global push.default simple

When push.default is set to 'matching', git will push local branches
to the remote branches that already exist with the same name.

Since Git 2.0, Git defaults to the more conservative 'simple'
behavior, which only pushes the current branch to the corresponding
remote branch that 'git pull' uses to update the current branch.
Peter Piper
sumber
1
Tapi apa bendera -uberdiri untuk saat ini? Masih disarankan oleh GitHub untuk menggunakan bendera ini ketika kami membuat repo baru ...
Jean Paul
8
@JeanPaul - Opsi -u melakukan hal berikut: Untuk setiap cabang yang up to date atau berhasil didorong, tambahkan referensi upstream (pelacakan), digunakan oleh argumen-less git-pull dan perintah lainnya. Jadi, setelah mendorong cabang lokal Anda dengan opsi -u, cabang lokal ini akan secara otomatis dihubungkan dengan cabang jarak jauh, dan Anda dapat menggunakan git pull tanpa argumen.
Peter Piper