Dari apa yang saya ingat, jika saya mengerjakan cabang, misalnya, my-feature-branch
saya dulu dapat melakukan ini dari magit-status
menu dengan P P
, dan kemudian memilih cabang jarak jauh dari daftar yang ada origin/my-feature-branch
di atas. Ini bekerja dengan baik.
Baru-baru ini, pada diskusi ini , saya dapat melakukan sesuatu yang serupa P -u e
(membuka magit-push-popup
, mengatur --set-upstream
bendera, dan menggunakan e
untuk tempat lain), yang juga akan membuat saya memilih dari daftar cabang yang dimulai dengan origin/my-feature-branch
. Ini bekerja dengan baik untuk saya juga. Namun yang lebih baru lagi, ini tidak lagi berfungsi, dan saya belum dapat menemukan cara terbaik untuk mengatur cabang upstream.
Ketika saya menggunakan P e
opsi pertama untuk mendorong cabang origin/my-feature-branch
, itulah yang hampir selalu saya inginkan. Namun, itu tidak ditetapkan origin/my-feature-branch
sebagai hulu untuk cabang lokal saya. Menggunakan P u
memungkinkan saya untuk memilih cabang hulu, tetapi origin/my-feature-branch
tidak ada dalam daftar, dan saya harus mengetik origin/my-feature-branch
tanpa penyelesaian tab (saya tahu ini tidak sulit, tetapi cenderung kesalahan pengguna, dan lebih lambat dari baris perintah).
Apakah ini satu-satunya cara untuk menetapkan cabang hulu sekarang, atau apakah saya kehilangan sesuatu? Saya telah melihat diskusi dan dokumentasi lain yang berkaitan dengan masalah ini, tetapi semua sumber yang saya temukan tampaknya sudah ketinggalan zaman.
<remote>/<branch>
bagian itu sengaja ditinggalkan keluar dari prompt (lihat komentar ini ). Sementara itu, Anda dapat mengaturmagit-push-current-set-remote-if-missing
ke nol.Jawaban:
Ada beberapa cara untuk mengatur hulu, sambil mendorong atau tanpa mendorong pada saat yang sama.
Jika
magit-push-current-set-remote-if-missing
bukan-nil
(default), maka Anda akan melihat sesuatu seperti:Untuk mendorong
origin/feature
dan mengaturnya sebagai upstream, tekan udan kemudian RETuntuk menerima kandidat penyelesaian default.Jika
magit-push-current-set-remote-if-missing
adalahnil
, maka Anda akan melihat ini sebagai gantinya:Jika Anda menekan psekarang, maka Anda akan diberitahu bahwa hulu tidak dikonfigurasikan (menyiratkan bahwa Anda tidak dapat mendorong ke hulu jika tidak ada hulu).
Tapi jika
magit-push-current-set-remote-if-missing
ininil
, maka daftar switch akan fitur--set-upstream
, sehingga Anda bisa menggunakan P - u pseperti yang Anda digunakan untuk (kecuali bahwa p kedua adalah huruf kecil). Namun ada satu komplikasi: setelah mengubah nilaimagit-push-current-set-remote-if-missing
Anda harus me-restart Emacs--set-upstream
agar muncul atau menghilang.Akhirnya anda dapat mengatur hulu menggunakan "set hulu (dan melakukan apa-apa lagi)" perintah: b u
origin/master
RET. Perhatikan bahwa ketika Anda menggunakan pendekatan ini, maka Anda hanya dapat memilih cabang yang sudah ada.Tetapi akan lebih baik untuk mengkonfigurasi push-remote dan push to itu. Untuk mempelajari lebih lanjut tentang push-remote dan perbedaannya dari hulu, lihat simpul Branching di manual info (versi web belum diperbarui).
Pada dasarnya, cabang hulu adalah cabang tempat cabang fitur Anda pada akhirnya akan digabung (dengan menggabungkan atau rebasing, bukan dengan mendorong), kemungkinan besar
origin/master
. Dan push-remote adalah tempat Anda mendorong cabang fitur Anda saat masih bekerja pada mereka atau agar orang lain dapat menggabungkannya. Jika cabang lokal bernamafeature
dan push-remotemy-fork
, maka mendorong cabang yang menggunakan P pakan mendorong kemy-fork/feature
. ("Push-to-branch" tidak dapat dikonfigurasi, nama cabang pada push-remote selalu sama dengan nama lokal.)Jadi sementara pertanyaan Anda adalah sesuatu seperti "bagaimana saya mendorong ke hulu, sementara mengkonfigurasi hulu pada saat yang sama", rekomendasi saya adalah untuk tidak mendorong ke hulu sama sekali, tetapi sebagai gantinya mendorong ke push-remote.
Asalkan Anda belum mengubah nilai
magit-push-current-set-remote-if-missing
Anda dapat mengkonfigurasi push-remote menggunakan P psome-remote
RET. Tapi, karena Anda mungkin mendorong semua cabang fitur ke remote yang sama, lebih baik untuk mengatur push-remote sekali untuk semua cabang dan selesai dengan itu: bdan kemudian M-psampai remote yang tepat dipilih.Juga perhatikan bahwa biasanya tidak perlu menetapkan cabang upstream secara eksplisit. Saat Anda membuat cabang baru dan memilih cabang jarak jauh sebagai titik awal, maka itu digunakan sebagai upstream.
Sayangnya titik awalnya biasanya adalah cabang lokal dan dalam kasus itu Git secara default tidak menggunakannya sebagai upstream. Tapi itu bisa dengan mudah diperbaiki dengan menjalankan ini sekali:
Nilai default adalah
true
, yang berarti "mengatur titik awal sebagai hulu, asalkan itu adalah cabang jarak jauh ".Omong-omong, hal yang sama berlaku untuk push-remote. Itu juga biasanya harus diatur semi-otomatis dalam repositori "baru". Jika Anda mengkloning repositori, Anda akan ditanya apakah Anda ingin menggunakannya
origin
sebagai push-remote. Anda harus menjawab "ya", kecuali Anda akan menambahkan remote lain, katakanlahmy-fork
, yang harus digunakan sebagai push-remote. Ketika Anda menambahkan remote menggunakan baru M adanremote.pushDefault
belum diatur, maka Anda akan ditanya apakah Anda ingin menggunakan remote yang baru ditambahkan sebagai push-remote.Ini dapat dikonfigurasi menggunakan
magit-clone-set-remote.pushDefault
danmagit-remote-add-set-remote.pushDefault
.Opsi lanjutan lainnya adalah
magit-branch-prefer-remote-upstream
, yang defaultnya adalahnil
. Jika Anda mengaturnya ket
, dan kemudian pilih cabang lokal sebagai titik awal untuk cabang baru, maka hulu dari titik awal mungkin (menurut beberapa aturan, lihat doc-string) digunakan sebagai hulu, bukan titik awal itu sendiri.sumber