Cambia un ramo a monte con Magit


47

Quando si spinge un ramo con Magit (con P P) e il ramo non ha monte, Magit ti chiede il nome del ramo che vuoi spingere. È fantastico.

Una volta impostato l'upstream per un ramo, Magit non ti chiede più dove vuoi spingerlo. Questo di solito è conveniente (non si desidera che ti venga chiesto ogni volta), ma rende difficile spingere un ramo in un altro ramo remoto.

C'è un modo per chiedere a Magit di chiedermi di nuovo sul ramo di destinazione, anche se il ramo attuale ha già un monte?


Caso d'uso

È abbastanza comune che io abbia un ramo come questo:

Local:    issue-30 ~/Git-Projects/repo/
Remote:   issue-30 @ origin (git@github.com:.../repo.git)
Head:     ebe4054 Some commit message

e voglio cambiare sia le filiali locali che remote issue-30-and-34. Se ho appena rinominato il ramo locale, rimango con questo:

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

Anche se cancello origin/issue-30, facendo P Pil issue-30-and-34 semplicemente ricreare il origin/issue-30.

Quello che finisco per fare è il seguente, ma sembra piuttosto rotonda per qualcosa che può essere fatto in un singolo gitcomando:

  1. Crea un nuovo ramo chiamato issue-30-and-34 (invece di rinominare quello vecchio),
  2. elimina le versioni locale e remota di issue-30,
  3. push issue-30-and-34(dal momento che non ha ancora monte, Magit mi chiederà dove spingere).

Ti preghiamo di considerare di accettare la risposta di @tarsius invece della mia (per facilitare la ricerca di informazioni pertinenti ).
Costantino,

@Constantine done.
Malabarba,

Risposte:


61

A partire da v2.1è possibile modificare l'upstream del ramo corrente in un ramo remoto o locale utilizzando bu[REMOTE/]BRANCHRET. A partire da v2.4, se è già impostato un upstream, bulo disinserirà e basta. Premere di unuovo per impostare un nuovo valore.

A partire da v2.4e se l'upstream non è impostato, è anche possibile impostare l'upstream mentre si spinge utilizzando pu[REMOTE/]BRANCHRET. Ti verrà chiesto automaticamente quale ramo utilizzare come upstream. Una volta impostato un upstream pu, spingerai su quello senza che tu possa cambiare l'upstream. Quindi, per cambiare l'upstream, devi usare l'approccio descritto nel paragrafo precedente.

Prima v2.4era anche possibile impostare il ramo remoto che si sta spingendo come ramo a monte utilizzando p-ueREMOTE/BRANCHRET. Ma ora l' --set-upstreaminterruttore non è più disponibile nel popup push per impostazione predefinita . Puoi ripristinarlo impostando magit-push-current-set-remote-if-missingsu zero. Ciò ha due effetti: l' --set-upstreaminterruttore sarà nuovamente disponibile dopo il prossimo riavvio e l'approccio descritto nel paragrafo precedente non funzionerà più.


Se vuoi che entrambe le funzionalità descritte nel secondo e terzo paragrafo siano disponibili contemporaneamente, lascia magit-push-current-set-remote-if-missingintatto e aggiungi questo al tuo file init:

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

11

Premi " P C-u C-u P" per fare in modo che Magit ti chieda quale ramo remoto e remoto usare prima di spingere.

(Con un singolo argomento prefisso (" P C-u P") Magit chiede quale telecomando usare.)

Ho trovato questo premendo P C-h k Pun buffer di stato Magit, leggendo i documenti di magit-pushe magit-push-dwim(questi documenti sembrano non aggiornati, a proposito) e sperimentando.

PS: utilizzo Magit magit-1.2.0-2049-ge6839e8.


5
Questa risposta è un po 'datata.
Szymon Wygnański,

1

Sembra che sia ora nella sezione branch / configure:

b C p per impostare il pushRemote


Qualche idea su come specificare un telecomando oltre a quello predefinito?
dispiaciuto il

0

A partire da novembre 2016, e l'ultima magit, ecco una soluzione parziale:

P e- ti permette di spingere elsewhere, ma non è ricordato

Non riuscivo a trovare un modo per Magit di farlo --set-upstream, quindi l'ho appena fatto dal terminale, in qualche modo un trucco, ma mi ha fatto superare questo problema:

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

E ora il nuovo upstream viene salvato e posso costruire la mia prossima cosa :)


1
"Non riesco a trovare un modo [...] per --set-upstream" - Forse dovresti provare a leggere la risposta di
tarsius

certo, è ciò che mi ha aiutato a capirlo. Da allora, magitè cambiato un po 'da allora, e la mia speranza è che la mia soluzione salvi qualcuno in più qualche minuto
Josh.F

1
Il primo paragrafo di quella risposta spiega come cambiare l'upstream, e funziona con l'ultimo magit.
npostavs,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.