Pertanyaan Mengapa saya harus melakukan `--set-upstream` sepanjang waktu?


Saya membuat cabang baru di Git:

git branch my_branch

Mendorongnya:

git push origin my_branch

Sekarang katakan seseorang membuat beberapa perubahan pada server dan saya ingin menariknya origin/my_branch. Saya lakukan:

git pull

Tetapi saya mendapatkan:

You asked me to pull without telling me which branch you
want to merge with, and 'branch.my_branch.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 "my_branch"]
    remote = <nickname>
    merge = <remote-ref>

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

See git-config(1) for details.

Saya belajar bahwa saya dapat membuatnya bekerja dengan:

git branch --set-upstream my_branch origin/my_branch

Tapi mengapa saya harus melakukan ini untuk setiap cabang yang saya buat? Bukankah sudah jelas jika saya mendorong my_branch ke origin/my_branch, maka saya ingin menarik origin/my_branch ke my_branch? Bagaimana saya bisa menjadikan ini perilaku default?


1057
2018-05-22 16:39


asal


Jawaban:


Pintasan, yang tidak bergantung pada mengingat sintaks untuk git branch --set-upstream  1 adalah melakukan:

git push -u origin my_branch

... pertama kali Anda mendorong cabang itu. Anda hanya perlu melakukannya sekali, dan itu membuat asosiasi antara cabang Anda dengan yang di origin dengan cara yang sama git branch --set-upstream tidak.

Secara pribadi, saya pikir itu hal yang baik harus mengatur hubungan antara cabang Anda dan satu di remote secara eksplisit. Sungguh memalukan bahwa peraturannya berbeda untuk git push dan git pull.


1 Ini mungkin terdengar konyol, tapi saya sangat sering lupa untuk menentukan cabang saat ini, dengan asumsi itu adalah default - tidak, dan hasilnya paling membingungkan :)

Perbarui 2012-10-11: Rupanya aku bukan satu-satunya orang yang merasa mudah untuk salah! Terimakasih untuk VonC untuk menunjukkan bahwa git 1.8.0 memperkenalkan yang lebih jelas git branch --set-upstream-to, yang dapat digunakan sebagai berikut, jika Anda berada di cabang my_branch:

git branch --set-upstream-to origin/my_branch

... atau dengan opsi singkat:

git branch -u origin/my_branch

Perubahan ini, dan alasannya, dijelaskan dalam catatan rilis untuk git 1.8.0, lepaskan kandidat 1:

Itu sangat menggoda untuk dikatakan git branch --set-upstream origin/master, tetapi itu memberitahu Git untuk mengatur cabang lokal origin/master untuk berintegrasi dengan cabang yang saat ini diperiksa, yang sangat tidak mungkin apa yang dimaksud pengguna. Pilihan sudah ditinggalkan; gunakan yang baru --set-upstream-to (dengan yang pendek dan manis -u) sebagai gantinya.


1199
2018-05-22 16:58



Anda dapat mewujudkannya dengan lebih sedikit mengetik. Pertama, ubah cara kerja push Anda:

git config --global push.default current

Ini akan menyimpulkan origin my_branch bagian, sehingga Anda dapat melakukan:

git push -u

Yang keduanya akan membuat cabang jarak jauh dengan nama yang sama dan melacaknya.


962
2018-04-08 10:14



Anda bisa begitu saja

git checkout -b my-branch origin/whatever

di tempat pertama. Jika Anda mengatur branch.autosetupmerge atau branch.autosetuprebase (favorit saya) untuk always (standarnya adalah true), my-branch akan secara otomatis melacak origin/whatever.

Lihat git help config.


70
2018-03-17 20:04



Anda dapat mengatur upstream lebih sederhana dengan dua cara. Pertama saat Anda membuat cabang:

git branch -u origin/my-branch

atau setelah Anda membuat cabang, Anda dapat menggunakan perintah ini.

git push -u origin/my-branch

Anda juga dapat melakukan cabang, memeriksa, dan mengatur aliran dalam satu perintah:

git checkout -b my-branch -t origin/my-branch

Preferensi pribadi saya adalah melakukan ini dengan perintah dua langkah:

git checkout -b my-branch
git push -u origin/my-branch

44
2018-03-17 13:28



Kamu dapat memakai:

git config --global branch.autosetupmerge selalu

yang akan menghubungkan cabang hulu setiap kali Anda membuat atau checkout cabang baru.

Lihat https://felipec.wordpress.com/2013/09/01/advanced-git-concepts-the-upstream-tracking-branch/

Ini juga berfungsi dengan autosetuprebase, jika Anda mengikuti alur kerja yang lebih terfokus, tetapi jangan gunakan ini kecuali Anda tahu apa yang Anda lakukan, karena akan mengubah perilaku tarik Anda menjadi rebase, yang dapat menyebabkan hasil yang aneh.


36
2018-04-28 20:05



By the way, cara pintas untuk mendorong cabang saat ini ke remote dengan nama yang sama:

$ git push -u origin HEAD

29
2017-09-15 14:20



Ini adalah penggunaan saya yang paling umum The Fuck.

$ git push
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin master

$ fuck
git push --set-upstream origin master [enter/↑/↓/ctrl+c]
Counting objects: 9, done.
...

Juga, menyenangkan untuk mengetik kata-kata makian di terminal Anda.


27
2017-11-15 17:22



git branch --set-upstream-to=origin/master<branch_name>

11
2018-06-30 04:39



Anda juga dapat secara eksplisit memberi tahu git tarik apa yang akan ditarik oleh cabang jarak jauh (seperti yang disebutkan di pesan kesalahan):

git pull <remote-name> <remote-branch>

Namun, berhati-hatilah dengan ini: jika Anda berada di cabang yang berbeda dan melakukan tarikan eksplisit, refspec yang Anda tarik akan digabung menjadi cabang yang Anda ikuti!


8
2018-03-20 14:41