Ändere den Upstream einer Filiale mit Magit

47

Wenn Sie mit Magit (mit P P) einen Zweig pushen und der Zweig keinen Upstream hat, fragt Magit Sie nach dem Namen des Zweigs, zu dem Sie pushen möchten. Das ist großartig.

Sobald Sie den Upstream für einen Zweig eingerichtet haben, werden Sie von Magit nicht mehr gefragt, wohin Sie ihn verschieben möchten. Dies ist normalerweise praktisch (Sie möchten nicht jedes Mal gefragt werden), macht es jedoch schwierig, einen Zweig auf einen anderen entfernten Zweig zu verschieben.

Gibt es eine Möglichkeit, Magit erneut nach dem Zielzweig fragen zu lassen, auch wenn der aktuelle Zweig bereits einen Upstream hat?


Anwendungsfall

Es ist durchaus üblich, dass ich einen Zweig wie diesen habe:

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

und ich möchte sowohl lokale als auch entfernte Zweige in ändern issue-30-and-34. Wenn ich den Zweig "Lokal" umbenenne, bleibt mir Folgendes übrig:

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

Auch wenn ich löschen origin/issue-30, tun P Pauf issue-30-and-34 wird die einfach neu erstellen origin/issue-30.

Was ich am Ende mache, ist das Folgende, aber es fühlt sich ziemlich rund an für etwas, das mit einem einzigen gitBefehl erledigt werden kann :

  1. Erstellen Sie einen neuen Zweig mit dem Namen issue-30-and-34 (anstatt den alten umzubenennen),
  2. Löschen Sie sowohl die lokale als auch die Remote-Version von issue-30,
  3. push issue-30-and-34(da es noch keinen Upstream gibt, wird Magit mich fragen, wo ich pushen soll).
Malabarba
quelle
Bitte ziehen Sie in Betracht, die Antwort von @tarsius anstelle meiner zu akzeptieren (um die Suche nach relevanten Informationen zu vereinfachen ).
Constantine
@Constantine fertig.
Malabarba

Antworten:

60

Mit können v2.1Sie den Upstream der aktuellen Niederlassung in eine entfernte oder lokale Niederlassung ändern bu[REMOTE/]BRANCHRET. Beginnend mit v2.4, wenn ein Upstream bereits festgelegt ist, buwird es nur deaktiviert. Drücken Sie uerneut einen neuen Wert zu setzen.

Beginnend mit v2.4und wenn der Upstream nicht eingestellt ist, können Sie den Upstream auch während des Drückens mit einstellen pu[REMOTE/]BRANCHRET. Sie werden automatisch gefragt, welcher Zweig als Upstream verwendet werden soll. Sobald ein Upstream eingestellt wurde pu, können Sie den Upstream ändern. So ändern , die stromaufwärts, müssen Sie den Ansatz im vorhergehenden Absatz beschriebenen verwenden.

Zuvor war v2.4es auch möglich, den Remote-Zweig, zu dem Sie pushen, als Upstream-Zweig festzulegen p-ueREMOTE/BRANCHRET. Aber jetzt ist der --set-upstreamSchalter standardmäßig nicht mehr im Push-Popup verfügbar . Sie können es zurückbekommen, indem Sie magit-push-current-set-remote-if-missingauf null setzen. Dies hat zwei Auswirkungen: Der --set-upstreamSwitch ist nach dem nächsten Neustart wieder verfügbar und die im vorherigen Absatz beschriebene Vorgehensweise funktioniert nicht mehr.


Wenn Sie möchten, dass beide im zweiten und dritten Absatz beschriebenen Funktionen gleichzeitig verfügbar sind, lassen Sie dies magit-push-current-set-remote-if-missingunberührt und fügen Sie Folgendes zu Ihrer Init-Datei hinzu:

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

P C-u C-u PDrücken Sie " ", damit Magit Sie fragt, welche Remote- und Remote-Verzweigung verwendet werden soll, bevor Sie drücken.

(Mit einem einzelnen Präfix-Argument (" P C-u P") fragt Magit, welche Fernbedienung verwendet werden soll.)

Ich fand dies, indem ich P C-h k Peinen Magit-Statuspuffer drückte , die Dokumente von magit-pushund las magit-push-dwim(diese Dokumente scheinen veraltet zu sein, übrigens) und experimentierte.

PS: Ich benutze Magit magit-1.2.0-2049-ge6839e8.

Konstantin
quelle
5
Diese Antwort ist etwas veraltet.
Szymon Wygnański
1

Es sieht so aus, als ob es sich jetzt unter dem Abschnitt branch / configure befindet:

b C p um die pushRemote zu setzen

William Casarin
quelle
Irgendeine Idee, wie man eine Fernbedienung neben der Standardeinstellung spezifiziert?
Scry
0

Ab November 2016 und spätestens magithier eine Teillösung:

P e- Ermöglicht das Drücken elsewhere, aber es wird nicht gespeichert

Ich konnte keinen Weg für magit finden --set-upstream, also habe ich das einfach vom Terminal aus gemacht, eine Art Betrug, aber es hat mich über dieses Problem gebracht:

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

Und jetzt ist der neue Upstream gespeichert und ich kann mein nächstes Ding bauen :)

Josh.F
quelle
1
"Ich finde keinen Weg [...] nach --set-upstream" - Vielleicht solltest du versuchen , die Antwort von
tarsius
Klar, es hat mir geholfen, das herauszufinden. Nur magithat sich seitdem ein wenig geändert, und ich hoffe, dass meine Lösung jemandem ein paar zusätzliche Minuten erspart
Josh.F
1
Der erste Absatz dieser Antwort erklärt, wie man den Upstream ändert, und es funktioniert in der neuesten Ausgabe.
Npostavs