Saya tampaknya mengerikan dalam menggunakan git, meskipun upaya terbaik saya untuk memahaminya.
Dari kernel.org untuk git push
:
-u
--set-hulu
Untuk setiap cabang yang terbaru atau berhasil didorong, tambahkan referensi upstream (pelacakan), digunakan oleh argumen-less git-pull (1) dan perintah lainnya. Untuk informasi lebih lanjut, lihat
branch.<name>.merge
di git-config (1).
Ini branch.<name>.merge
dari git config
:
branch.<name>.merge
Mendefinisikan, bersama dengan
branch.<name>.remote
, cabang hulu untuk cabang yang diberikan. Ia memberitahu git fetch / git untuk menarik cabang mana yang akan digabung dan juga dapat memengaruhi push git (lihat push.default). Ketika di cabang<name>
, ia memberitahu git mengambil refspec default untuk ditandai untuk digabung dalam FETCH_HEAD. Nilai ditangani seperti bagian remote dari refspec, dan harus cocok dengan ref yang diambil dari remote yang diberikan oleh"branch.<name>.remote"
. Informasi penggabungan digunakan oleh git pull (yang pada awalnya memanggil git fetch) untuk mencari cabang default untuk digabung. Tanpa opsi ini, git pull default untuk menggabungkan refspec pertama yang diambil. Tentukan beberapa nilai untuk mendapatkan gabungan gurita. Jika Anda ingin mengatur git pull sehingga bergabung<name>
dari cabang lain di repositori lokal, Anda bisa mengarahkanbranch.<name>.merge
ke cabang yang diinginkan, dan gunakan pengaturan khusus. (periode) untukbranch.<name>.remote
.
Saya berhasil mengatur repositori jarak jauh dengan github, dan saya berhasil mendorong komit pertama saya ke sana dengan:
git push -u origin master
Kemudian, tanpa disadari saya berhasil mendorong komit kedua ke repositori jarak jauh menggunakan:
git commit -m '[...]'
Namun, salah berpikir bahwa saya harus mendorong lagi origin
dari master
, saya berlari:
# note: no -u
git push origin master
Apa yang dilakukannya? Tampaknya tidak berpengaruh sama sekali. Apakah saya "membatalkan" git push -u origin master
?
I'm apparently terrible at using git, despite my best attempts to understand it.
- Saya tidak pernah memiliki seseorang yang menciptakan saya dengan baik.Jawaban:
Kuncinya adalah "argumen-less git-pull". Ketika Anda melakukan
git pull
dari cabang, tanpa menentukan sumber jarak jauh atau cabang, git melihatbranch.<name>.merge
pengaturan untuk mengetahui dari mana menarik.git push -u
set informasi ini untuk cabang yang Anda dorong.Untuk melihat perbedaannya, mari gunakan cabang kosong yang baru:
Pertama, kami mendorong tanpa
-u
:Sekarang jika kita menambahkan
-u
:Perhatikan bahwa informasi pelacakan telah diatur sehingga
git pull
berfungsi seperti yang diharapkan tanpa menentukan jarak jauh atau cabang.Pembaruan: Kiat bonus:
git pull
pengaturan ini juga mempengaruhi perilaku defaultgit push
. Jika Anda terbiasa menggunakan-u
untuk menangkap cabang jarak jauh yang ingin Anda lacak, saya sarankan mengaturpush.default
nilai konfigurasi Andaupstream
.git push -u <remote> HEAD
akan mendorong cabang saat ini ke cabang dengan nama yang sama aktif<remote>
(dan juga mengatur pelacakan sehingga Anda dapat melakukannyagit push
setelah itu).sumber
git push <remote> <branch>
membuat hal-hal tidak ambigu . Jika Anda mematikan remote atau git cabang jatuh kembali pada pengaturan konfigurasi cabang, yang ditetapkan untuk Andagit push -u
.git push origin test
(yang tidak memiliki-u
). Anda kemudian menunjukkan bahwagit push -u origin test
menghapus ambiguitas. Apakah ada kesalahan ketik, atau apakah saya hanya menjadi padat lagi?git push <remote> <branch>
tidak ambigu, maksud saya relatifgit push
yang bergantung pada konfigurasi cabang. Demikian pula,git pull <remote> <branch>
tidak ambigu dangit pull
bergantung pada konfigurasi cabang. Setelah Anda mendorong-u
, keduanyagit push
dangit pull
akan bekerja seperti yang diharapkan.git push
- kecuali jika Anda mengaturpush.default
sendiri,git push
hanya menggunakan konfigurasi cabang hulu untuk memutuskan jarak yang mendorong, bukan cabang jarak jauh untuk memperbarui.git push origin master
dan sama dengan IE sisi lain.git pull origin master
.. Jadi Jika misalkan perubahan cabang maka Anda bisagit push origin branch_name
dan sama ke sisi lain IE.git pull origin branch_name
… sama dengan:
Lakukan pernyataan terakhir, jika Anda lupa
-u
!Atau Anda bisa memaksanya:
Jika Anda membiarkan perintah melakukannya untuk Anda, itu akan memilih kesalahan Anda seperti jika Anda mengetikkan cabang yang tidak ada atau tidak
git remote add
; meskipun itu mungkin yang Anda inginkan. :)sumber
master
hanyalah sebuah contoh :)git branch master -u origin/master
details @ stackoverflow.com/a/2286030/790359-u
opsi, ketikgit push -u
segera akan OK.--setup-upstream
akan usang:The --set-upstream flag is deprecated and will be removed. Consider using --track or --set-upstream-to
git branch --set-upstream-to=origin/master master
Secara lebih sederhana:
Secara teknis,
-u
bendera menambahkan referensi pelacakan ke server hulu yang Anda dorong.Yang penting di sini adalah bahwa ini memungkinkan Anda melakukan
git pull
tanpa memberikan argumen lagi. Misalnya, setelah Anda melakukangit push -u origin master
, Anda dapat menelepongit pull
dan git kemudian akan tahu bahwa Anda benar-benar bermaksudgit pull origin master
.Jika tidak, Anda harus mengetikkan seluruh perintah.
sumber
-u
bendera untukorgin master
setiap tarikan berikutnya akan merujuknya. Dan jika saya ingin mengubahgit pull
perilaku yang harus saya jalankangit push -u origin some_other_branch
dangit pull
sekarang akan merujuk kesome_other_branch
? Terima kasih!git push -u origin master
Semua perintah git bash yang diperlukan untuk mendorong dan menarik ke Github:
Jika Anda ingin mengedit file, maka:
Untuk melihat semua cabang dan komitmennya:
sumber