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 menarik dari origin/my_branch
. Saya lakukan:
git pull
Tapi 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
Tetapi mengapa saya perlu melakukan ini untuk setiap cabang yang saya buat? Bukankah sudah jelas bahwa jika saya mendorong my_branch
ke dalam origin/my_branch
, maka saya ingin menarik origin/my_branch
ke dalam my_branch
? Bagaimana saya bisa menjadikan ini perilaku default?
git
git-branch
Ram Rachum
sumber
sumber
branch.autosetupmerge
berarti bahwa konfigurasi hulu untuk cabang baru hanya secara otomatis ditetapkan ketika membuat cabang dari cabang pelacakan jarak jauh (misalnya<remote-name>/<branch-name>
) (lihat git-config (1) ). Anda mungkin membuat cabang dari cabang lokal yang ada. Jika Anda secara efektif bercabang langsung dari ujung cabang jarak jauh (meskipun berada di cabang lokal), maka Anda dapat menggunakangit branch my_branch <remote-name>/<branch-name>
untuk secara otomatis mengatur konfigurasi upstream.--set-upstream
opsi ini sudah tidak digunakan lagi. Anda harus menggunakan--track
atau--set-upstream-to
sebagai gantinya.--set-upstream
sudah usang, maka mungkin git devs harus menghapusnya dari pesan bantuan yang ditampilkan ketika Anda menjalankangit push
tanpa opsi dan tidak ada upstream diatur?git branch --set-upstream
sudah tidak digunakan lagi.git push --set-upstream
tidak.Jawaban:
Cara pintas, yang tidak bergantung pada mengingat sintaks untuk
git branch --set-upstream
1 adalah melakukan:... pertama kali Anda mendorong cabang itu. Atau, untuk mendorong ke cabang saat ini ke cabang dengan nama yang sama (berguna untuk alias):
Anda hanya perlu menggunakan
-u
satu kali, dan itu mengatur hubungan antara cabang Anda dan cabangorigin
di dengan cara yang sama sepertigit branch --set-upstream
halnya.Secara pribadi, saya pikir itu hal yang baik untuk mengatur hubungan antara cabang Anda dan satu di remote secara eksplisit. Sayang sekali aturannya berbeda untuk
git push
dangit pull
.1 Mungkin terdengar konyol, tapi saya sangat sering lupa untuk menentukan cabang saat ini, dengan asumsi itu adalah default - tidak, dan hasilnya paling membingungkan :)
Pembaruan 2012-10-11 : Rupanya saya bukan satu-satunya orang yang merasa mudah salah! Terima kasih kepada 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 cabangmy_branch
:... atau dengan opsi pendek:
Perubahan ini, dan alasannya, dijelaskan dalam catatan rilis untuk git 1.8.0, kandidat rilis 1 :
sumber
-u
pertama kali mendorong, Anda dapat menjalankan lagi dorongan dengan bendera itu dan itu akan mulai melacak.alias gpo="git push --set-upstream origin $(git branch | awk '/^\* / { print $2 }')"
Anda dapat mewujudkannya dengan sedikit mengetik. Pertama, ubah cara kerja push Anda:
Ini akan menyimpulkan
origin my_branch
bagian, sehingga Anda dapat melakukan:Yang mana keduanya akan membuat cabang jauh dengan nama yang sama dan melacaknya.
sumber
origin
ketika menjalankangit push -u
cabang yang baru dibuat di repositori yang baru dibuat? Apakah asumsi repositori telah dikloning sehingga cabang saat ini diatur ke remoteorigin
?pull
Anda harus menentukan dari mana. The-u
set up pelacakan cabang antara asal dan repo lokal Anda.push
- satunya - yang mengalahkan seluruh poin dari pertanyaan ini. Singkatnya, tidak ada jawaban yang bagus. Bahwa pengembang Git bersikeras mempertahankan Awkward User eXperience (AUX) ini dalam menghadapi perbedaan pendapat masyarakat yang luas ... ... mencerahkan. Dan mengecilkan hati. (Sebagian besar mengecilkan hati.)Anda bisa saja
di tempat pertama. Jika Anda mengatur
branch.autosetupmerge
ataubranch.autosetuprebase
(favorit saya) kealways
(standarnya adalahtrue
),my-branch
akan secara otomatis melacakorigin/whatever
.Lihat
git help config
.sumber
git checkout -t origin/whatever
, yang juga memilihwhatever
sebagai nama cabang baru. Sangat mudah!-u
/--set-upstream
.git checkout -t origin/whatever
tidak berfungsi untuk saya ketika mencoba membuat cabang baru:fatal: Cannot update paths and switch to branch 'whatever' at the same time.
git checkout -b my-branch origin/whatever
juga memiliki kesalahan yang sama (saya mencoba membuat cabang baru yang tidak ada di lokal atau jarak jauh):fatal: Cannot update paths and switch to branch 'whatever' at the same time.
Ini adalah penggunaan saya yang paling umum untuk The Fuck .
Juga, menyenangkan untuk mengetik kata-kata umpatan di terminal Anda.
sumber
Anda dapat mengatur upstream lebih sederhana dengan dua cara. Pertama saat Anda membuat cabang:
atau setelah Anda membuat cabang, Anda dapat menggunakan perintah ini.
Anda juga dapat bercabang, memeriksa dan mengatur upstream dalam satu perintah:
Preferensi pribadi saya adalah melakukan ini dalam perintah dua langkah:
sumber
git branch -u origin/my-branch
saya bisa berlarigit pull
untuk menarik perubahan saya.git checkout -t origin/my-branch
tanpa-b my-branch
, itu hanya akan secara otomatis menyimpulkanmy-branch
untuk nama cabang lokal. Namun, seperti @Spongman sebutkan, perintah ini tidak berfungsi jikaorigin/my-branch
tidak ada terlebih dahulu.git push -u origin/my-branch
gagal untuk saya denganfatal: 'origin/my-branch' does not appear to be a git repository
. Ini bekerja:git push -u origin my-branch
Kamu bisa menggunakan:
yang akan menautkan 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 baik
branch.autosetuprebase
, jika Anda mengikuti alur kerja yang lebih fokus pada rebase, tetapi jangan gunakan ini kecuali Anda tahu apa yang Anda lakukan, karena itu akan mengubah perilaku tarik Anda menjadi rebase, yang dapat menyebabkan hasil yang aneh.sumber
--set-upstream
pesanmaster
. 2. Larigit checkout -b new_branch
. 3. Tambahkan komit ke cabang itu. 4git push origin new_branch
.. Ini mendorong yang komit kemaster
cabang asal (bukan ke cabang baru asal disebutnew_branch
).Omong-omong, pintasan untuk mendorong cabang saat ini ke jarak jauh dengan nama yang sama:
sumber
Saya pribadi menggunakan alias berikut ini di bash
dalam file ~ / .gitconfig
dan dalam file ~ / .bashrc atau ~ / .zshrc
sumber
git pushup
yang selalu mendorong cabang saat ini ke asal. Saya selalu bisa menggunakangit pushup
alih-alihgit push
👍Jika di bawah ini tidak berfungsi:
Anda juga harus memperbarui konfigurasi lokal proyek Anda, karena kemungkinan proyek Anda memiliki konfigurasi git lokal:
sumber
Anda juga dapat secara eksplisit memberi tahu git pull cabang jarak jauh mana yang akan ditarik (seperti yang disebutkan dalam pesan kesalahan):
git pull <remote-name> <remote-branch>
Namun hati-hati dengan ini: jika Anda berada di cabang yang berbeda dan melakukan tarikan eksplisit, refspec yang Anda tarik akan digabungkan ke dalam cabang yang Anda tuju!
sumber
Untuk apa nilainya, jika Anda mencoba melacak cabang yang sudah ada pada remote (mis. Asal / somebranch) tetapi belum memeriksanya secara lokal, Anda dapat melakukannya:
Catatan: '-t' adalah versi singkat dari opsi '--track'.
Ini mengatur asosiasi yang sama langsung dari kelelawar.
sumber
git checkout somebranch
setara.git fetch
langsung sebelumnya?git fetch
ataugit pull
. Saya tidak pernah menemukan itu menjadi masalah.sumber
Saya menggunakan alias Git ini alih-alih menyalin / menempelkan saran dari Git setiap kali: https://gist.github.com/ekilah/88a880c84a50b73bd306
Sumber disalin di bawah (tambahkan ini ke
~/.gitconfig
file Anda ):sumber
Anda dapat mengatur alias yang benar-benar bagus yang dapat menangani ini tanpa sintaks yang terlalu bertele-tele.
Saya memiliki alias berikut di
~/.gitconfig
:Setelah membuat komit pada cabang baru, Anda bisa mendorong cabang baru Anda dengan hanya mengetik perintah:
sumber
po
?push origin
? apa yang terjadi jika ini dijalankan beberapa kali?git push -f
alias yang disetel kegit pf
, jadi saya menggunakannya setelah asal sudah didorong.HEAD
Bagi mereka yang mencari alias yang berfungsi
git pull
, inilah yang saya gunakan:Sekarang setiap kali Anda mendapatkan:
Lari saja:
Dan Anda baik untuk pergi
sumber
Karena git memiliki kemampuan keren untuk mendorong / menarik cabang yang berbeda ke repositori "hulu" yang berbeda. Anda bahkan dapat menggunakan repositori terpisah untuk mendorong dan menarik - pada cabang yang sama. Ini dapat membuat aliran multi-level terdistribusi, saya dapat melihat ini berguna pada proyek seperti kernel Linux. Git awalnya dibangun untuk digunakan pada proyek itu.
Sebagai akibatnya, itu tidak membuat asumsi tentang repo cabang Anda yang harus dilacak.
Di sisi lain, sebagian besar orang tidak menggunakan git dengan cara ini, jadi ini mungkin cocok untuk opsi default.
Git umumnya levelnya cukup rendah dan bisa membuat frustasi. Namun ada GUI dan seharusnya mudah untuk menulis skrip pembantu jika Anda masih ingin menggunakannya dari shell.
sumber
Anda juga bisa melakukannya
git push -u origin $(current_branch)
sumber
Saya semacam ditemukan kembali
legit
karena masalah ini (hanya OS X). Sekarang yang saya gunakan saat bercabang adalah dua perintah ini:legit publish [<branch>]
Menerbitkan cabang yang ditentukan ke remote. (alias:pub
)legit unpublish <branch>
Menghapus cabang tertentu dari jarak jauh. (alias:unp
)SublimeGit hadir dengan
legit
dukungan secara default, yang membuat seluruh rutinitas percabangan semudah menekan Ctrl-b.sumber
Kami menggunakan phabricator dan tidak mendorong menggunakan git. Saya harus membuat alias bash yang berfungsi di Linux / mac
menyimpan
sumber
Berikut adalah alias bash untuk git push yang aman dijalankan untuk setiap push dan secara otomatis akan beralih antara pengaturan upstream untuk push pertama dan kemudian melakukan push normal setelahnya.
Pos Asli
sumber