Pertanyaan Perilaku default "git push" tanpa cabang yang ditentukan


Saya menggunakan perintah berikut untuk mendorong ke cabang jarak jauh saya:

git push origin sandbox

Jika saya katakan

git push origin

apakah itu mendorong perubahan di cabang saya yang lain juga, atau apakah itu hanya memperbarui cabang saya saat ini? Saya memiliki tiga cabang: master, production dan sandbox.

Itu git push dokumentasi tidak begitu jelas tentang ini, jadi saya ingin mengklarifikasi ini untuk selamanya.

Cabang dan remote yang melakukan hal berikut git push perintah perbarui tepatnya?

git push 
git push origin

origin di atas adalah remote.

aku mengerti itu git push [remote] [branch] hanya akan mendorong cabang itu ke remote.


1213
2018-06-04 02:45


asal


Jawaban:


Anda dapat mengontrol perilaku default dengan mengatur push.default di konfigurasi git Anda. Dari dokumentasi git-config (1):

push.default

Mendefinisikan aksi yang harus dilakukan oleh git push jika tidak ada refspec diberikan pada baris perintah, tidak ada refspec yang dikonfigurasi di remote, dan tidak ada refspec yang tersirat oleh salah satu opsi yang diberikan pada baris perintah. Nilai yang memungkinkan adalah:

  • nothing: jangan mendorong apa pun

  • matching: dorong semua cabang yang cocok

    Semua cabang memiliki nama yang sama di kedua ujungnya dianggap cocok.

    Ini adalah default di Git 1.x.

  • upstream: dorong cabang saat ini ke cabang hulu (tracking adalah sinonim yang tidak berlaku untuk upstream)

  • current: dorong cabang saat ini ke cabang dengan nama yang sama

  • simple: (baru di Git 1.7.11) seperti hulu, tetapi menolak untuk menekan jika nama cabang hulu berbeda dari yang lokal

    Ini adalah opsi paling aman dan cocok untuk pemula.

    Ini akan menjadi default di Git 2.0.

Modus sederhana, saat ini dan hulu adalah bagi mereka yang ingin mendorong keluar cabang tunggal setelah menyelesaikan pekerjaan, bahkan ketika cabang lain belum siap untuk didorong keluar

Contoh baris perintah:

Untuk melihat konfigurasi saat ini:

git config --global push.default

Untuk mengatur konfigurasi baru:

git config --global push.default current

1422
2018-06-04 03:16



git push origin akan mendorong semua perubahan pada cabang lokal yang memiliki cabang-cabang terpencil yang sesuai origin Seperti untuk git push 

Bekerja seperti git push <remote>, dimana <remote> adalah remote cabang saat ini (atau asal, jika tidak ada remote dikonfigurasi untuk cabang saat ini).

Dari bagian Contoh dari git-push halaman manual


197
2017-10-06 10:45



Anda dapat mengatur perilaku default untuk git Anda dengan push.default

git config push.default current

atau jika Anda memiliki banyak repositori dan menginginkan yang sama untuk semua itu

git config --global push.default current

Itu arus dalam pengaturan ini berarti secara default Anda akan melakukannya hanya mendorong cabang saat ini saat kamu melakukan git push

Pilihan lainnya adalah:

  • tidak ada: Jangan mendorong apa pun
  • pencocokan: Dorong semua cabang yang cocok (default)
  • pelacakan: Dorong cabang saat ini ke apa pun yang dilacaknya
  • saat ini: Dorong cabang saat ini

UPDATE - CARA BARU UNTUK MELAKUKANNYA

Mulai Git 1.7.11 lakukan hal berikut:

git config --global push.default simple

Ini adalah pengaturan baru yang diperkenalkan yang bekerja dengan cara yang sama seperti saat ini, dan akan dibuat default ke git dari v 2.0 menurut rumor


194
2017-11-06 10:05



Saya baru saja menyerahkan kode saya ke cabang dan mendorongnya ke github, seperti ini:

git branch SimonLowMemoryExperiments
git checkout SimonLowMemoryExperiments
git add .
git commit -a -m "Lots of experimentation with identifying the memory problems"
git push origin SimonLowMemoryExperiments

55
2017-08-09 08:02



Berikut adalah informasi yang sangat berguna dan bermanfaat Git Push: Git Push: Hanya Tip

Penggunaan git push yang paling umum adalah untuk mendorong perubahan lokal Anda ke repositori hulu publik Anda. Dengan asumsi bahwa upstream adalah remote bernama "origin" (nama remote default jika repositori Anda adalah klon) dan cabang yang akan diperbarui ke / dari diberi nama "master" (nama cabang default), ini dilakukan dengan: git push origin master

git push origin akan mendorong perubahan dari semua cabang lokal ke cabang yang cocok dengan remote asal.

git push origin master akan mendorong perubahan dari cabang master lokal ke cabang master jarak jauh.

git push origin master:staging akan mendorong perubahan dari cabang master lokal ke cabang pementasan jauh jika ada.


22
2018-03-17 11:13



(Maret 2012)
Hati-hati: default itu "matching"Kebijakan mungkin akan segera berubah
(kadang setelah git1.7.10 +)
:

Lihat "Silakan diskusikan: apa yang harus dilakukan "git push" ketika Anda tidak mengatakan apa yang harus didorong?"

Dalam pengaturan saat ini (yaitu. push.default=matching), git push tanpa argumen akan mendorong semua cabang yang ada secara lokal dan jarak jauh dengan nama yang sama.
  Ini biasanya tepat ketika pengembang mendorong ke repositori publiknya sendiri, tetapi mungkin membingungkan jika tidak berbahaya ketika menggunakan repositori bersama.

Proposal adalah untuk ubah default ke 'upstream', yaitu hanya mendorong cabang saat ini, dan mendorongnya ke cabang git pull akan menarik.
  Kandidat lain adalah 'current'; ini hanya mendorong cabang saat ini ke cabang jarak jauh dengan nama yang sama.

Apa yang telah dibahas sejauh ini dapat dilihat di utas ini:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Diskusi yang relevan sebelumnya termasuk:

Untuk bergabung dengan diskusi, kirim pesan Anda ke: git@vger.kernel.org


19
2018-03-15 00:50



Saya hanya menempatkan ini di bagian alias gitconfig saya dan suka cara kerjanya:

pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f"

Akan mendorong cabang saat ini ke asal git pub atau repo lain dengan git pub repo-name. Lezat.


17
2018-06-04 02:49



A git push akan mencoba dan mendorong semua cabang lokal ke server jauh, ini mungkin apa yang tidak Anda inginkan. Saya memiliki beberapa pengaturan kemudahan untuk menangani ini:

Alias ​​"gpull" dan "gpush" dengan tepat:

Di ~ / .bash_profile saya

get_git_branch() {
  echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'`
}
alias gpull='git pull origin `get_git_branch`'
alias gpush='git push origin `get_git_branch`'

Jadi, mengeksekusi "gpush" atau "gpull" akan mendorong hanya cabang "saat ini".


8
2018-06-23 07:50