Ubah hulu cabang dengan Magit

47

Saat Anda mendorong cabang dengan Magit (dengan P P) dan cabang tidak memiliki hulu, Magit menanyakan nama cabang yang ingin Anda dorong. Itu hebat.

Namun, begitu Anda mengatur cabang upstream untuk cabang, Magit tidak lagi menanyakan di mana Anda ingin mendorongnya. Ini biasanya nyaman (Anda tidak ingin ditanya setiap saat), tetapi membuatnya sulit untuk mendorong cabang ke cabang jarak jauh yang berbeda.

Apakah ada cara agar Magit bertanya kepada saya lagi tentang cabang tujuan, bahkan jika cabang saat ini sudah memiliki hulu?


Kasus penggunaan

Cukup umum bahwa saya memiliki cabang seperti ini:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin ([email protected]:.../repo.git)
Head:     ebe4054 Some commit message

dan saya ingin mengubah cabang Lokal dan Remote ke issue-30-and-34. Jika saya mengganti nama cabang lokal, saya tahu ini:

Local:    issue-30-and-34 ~/Git-Projects/repo/
Remote:   issue-30 @ origin ([email protected]:.../repo.git)
Head:     ebe4054 Some commit message

Bahkan jika saya menghapus origin/issue-30, melakukan P Ppada issue-30-and-34 hanya akan menciptakan origin/issue-30.

Yang akhirnya saya lakukan adalah sebagai berikut, tetapi rasanya agak tidak langsung untuk sesuatu yang dapat dilakukan dalam satu gitperintah:

  1. Buat cabang baru yang disebut issue-30-and-34 (alih-alih mengganti nama yang lama),
  2. menghapus versi Lokal dan Remote issue-30,
  3. push issue-30-and-34(karena belum ada hulu, Magit akan bertanya di mana saya harus mendorong).
Malabarba
sumber
Harap pertimbangkan menerima jawaban dengan @tarsius alih-alih milik saya (untuk mempermudah menemukan informasi yang relevan ).
Constantine
@Constantine selesai.
Malabarba

Jawaban:

60

Mulai dengan v2.1Anda dapat mengubah hulu dari cabang saat ini menjadi cabang jarak jauh atau lokal menggunakan bu[REMOTE/]BRANCHRET. Dimulai dengan v2.4, jika upstream sudah ditetapkan, maka buhanya akan menghapusnya. Tekan ulagi untuk menetapkan nilai baru.

Mulai dengan v2.4dan jika upstream tidak disetel, Anda juga dapat mengatur upstream saat mendorong dengan menggunakan pu[REMOTE/]BRANCHRET. Anda akan secara otomatis ditanya cabang apa yang akan digunakan sebagai hulu. Setelah upstream telah ditetapkan puakan mendorongnya tanpa membiarkan Anda mengubah upstream. Jadi untuk mengubah hulu, Anda harus menggunakan pendekatan yang dijelaskan dalam paragraf sebelumnya.

Sebelumnya v2.4juga dimungkinkan untuk mengatur cabang jarak jauh yang Anda dorong sebagai cabang hulu menggunakan p-ueREMOTE/BRANCHRET. Tapi sekarang --set-upstreamsaklar tidak lagi tersedia di push popup secara default . Anda bisa mendapatkannya kembali dengan mengatur magit-push-current-set-remote-if-missingke nol. Itu memiliki dua efek: --set-upstreamsaklar akan tersedia lagi setelah restart berikutnya dan pendekatan yang dijelaskan dalam paragraf sebelumnya tidak akan berfungsi lagi.


Jika Anda ingin kedua fitur yang dijelaskan dalam paragraf kedua dan ketiga tersedia pada saat yang sama, maka jangan magit-push-current-set-remote-if-missingtersentuh dan tambahkan ini ke file init Anda:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")
tarsius
sumber
11

Tekan " P C-u C-u P" untuk membuat Magit menanyakan cabang jarak jauh dan jarak jauh mana yang akan digunakan sebelum mendorong.

(Dengan argumen awalan tunggal (" P C-u P") Magit menanyakan jarak jauh apa yang digunakan.)

Saya menemukan ini dengan menekan P C-h k Ppenyangga status Magit, membaca dokumen magit-pushdan magit-push-dwim(sepertinya dokumen ini kedaluwarsa, BTW), dan bereksperimen.

PS: Saya pakai Magit magit-1.2.0-2049-ge6839e8.

Constantine
sumber
5
Jawaban ini agak ketinggalan jaman.
Szymon Wygnański
1

Sepertinya ada di bawah bagian cabang / konfigurasi sekarang:

b C p untuk mengatur pushRemote

William Casarin
sumber
Adakah yang tahu cara menentukan remote selain dari default?
scry
0

Pada November 2016, dan yang terbaru magit, inilah solusi parsial:

P e- memungkinkan Anda untuk mendorong elsewhere, tetapi itu tidak diingat

Saya tidak dapat menemukan cara bagi magit --set-upstream, jadi saya hanya melakukan ini dari terminal, semacam cheat tapi itu membuat saya mengatasi masalah ini:

git push --set-upstream origin <branch-name>

Dan sekarang hulu baru sudah disimpan, dan saya dapat membangun hal berikutnya :)

Josh.F
sumber
1
"Saya tidak dapat menemukan cara [...] untuk --set-upstream" - Mungkin Anda harus mencoba membaca jawaban tarsius
npostavs
tentu, itu yang membantu saya mengetahui hal ini. Hanya, magittelah berubah sedikit sejak itu, dan harapan saya adalah solusi saya menyelamatkan seseorang beberapa menit
Josh.F
1
Paragraf pertama dari jawaban itu menjelaskan cara mengubah hulu, dan itu bekerja di magit terbaru.
npostavs