Zmień upstream oddziału za pomocą Magit

47

Kiedy wypychasz gałąź za pomocą Magit (za pomocą P P), a gałąź nie ma wcześniejszego biegu, Magit pyta cię o nazwę gałęzi, do której chcesz pchać. To wspaniale.

Jednak po ustawieniu upstream dla gałęzi Magit nie pyta cię już, gdzie chcesz go przepchnąć. Jest to zwykle wygodne (nie chcesz za każdym razem pytać), ale utrudnia przesunięcie gałęzi do innej zdalnej gałęzi.

Czy istnieje sposób, aby Magit zapytał mnie ponownie o gałąź docelową, nawet jeśli bieżąca gałąź ma już górną granicę?


Przypadek użycia

Dość często mam taką gałąź:

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

i chcę zmienić oddziały lokalne i zdalne na issue-30-and-34. Jeśli tylko zmienię nazwę oddziału lokalnego, pozostanie mi to:

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

Nawet jeśli usunę origin/issue-30, wykonanie P Ppo issue-30-and-34 prostu odtworzy plik origin/issue-30.

Skończyło się na tym, że wydaje mi się, że jest to rondo, które można wykonać za pomocą jednego gitpolecenia:

  1. Utwórz nowy oddział o nazwie issue-30-and-34 (zamiast zmiany nazwy starego),
  2. usuń wersje lokalne i zdalne issue-30,
  3. push issue-30-and-34(ponieważ nie ma jeszcze upstream, Magit zapyta mnie, gdzie pushować).
Malabarba
źródło
Proszę rozważyć przyjęcie odpowiedzi przez @tarsius zamiast mojej (aby ułatwić znalezienie odpowiednich informacji).
Constantine
@ Constantine zrobione.
Malabarba

Odpowiedzi:

60

Zaczynając od v2.1, możesz zmienić poprzednią gałąź na zdalną lub lokalną gałąź za pomocą bu[REMOTE/]BRANCHRET. Zaczynając od v2.4, jeśli upstream jest już ustawiony, to bupo prostu go rozbroi. Naciśnij uponownie, aby ustawić nową wartość.

Zaczynając od v2.4i jeśli upstream jest rozbrojony, możesz również ustawić upstream podczas pchania za pomocą pu[REMOTE/]BRANCHRET. Zostaniesz automatycznie zapytany, jakiej gałęzi użyć jako nadrzędnej. Po ustawieniu upstream pupopchnie do tego, nie pozwalając ci zmienić upstream. Tak więc, aby zmienić upstream, musisz zastosować podejście opisane w poprzednim akapicie.

Wcześniej v2.4można było również ustawić gałąź zdalną, do której wypychasz, jako gałąź nadrzędną p-ueREMOTE/BRANCHRET. Ale teraz --set-upstreamprzełącznik nie jest już domyślnie dostępny w okienku push . Możesz go odzyskać, ustawiając magit-push-current-set-remote-if-missingzero. Ma to dwa efekty: --set-upstreamprzełącznik będzie ponownie dostępny po następnym restarcie, a podejście opisane w poprzednim akapicie przestanie działać.


Jeśli chcesz, aby obie funkcje opisane w drugim i trzecim akapicie były dostępne jednocześnie, pozostaw to magit-push-current-set-remote-if-missingnietknięte i dodaj to do pliku inicjującego:

(magit-define-popup-switch 'magit-push-popup
  ?u "Set upstream" "--set-upstream")
Tarsjusz
źródło
11

Naciśnij „ P C-u C-u P”, aby Magit zapytał cię, jakiej zdalnej i zdalnej gałęzi użyć przed wypchnięciem.

(Za pomocą argumentu z pojedynczym prefiksem („ P C-u P”) Magit pyta, którego pilota należy użyć.)

Znalazłem to, naciskając P C-h k Pw buforze stanu Magit, czytając dokumenty magit-pushi magit-push-dwim(te dokumenty wydają się nieaktualne, BTW) i eksperymentując.

PS: Używam Magit magit-1.2.0-2049-ge6839e8.

Konstantyn
źródło
5
Ta odpowiedź jest nieco nieaktualna.
Szymon Wygnański
1

Wygląda na to, że znajduje się teraz w sekcji gałąź / konfiguracja:

b C p ustawić pushRemote

William Casarin
źródło
Masz jakiś pomysł, jak określić pilota oprócz domyślnego?
scry
0

Od listopada 2016 r. I najnowsze magit, oto częściowe rozwiązanie:

P e- pozwala naciskać elsewhere, ale nie jest to zapamiętywane

Nie mogłem znaleźć sposobu na magit --set-upstream, więc zrobiłem to z terminalu, rodzaj oszustwa, ale udało mi się rozwiązać ten problem:

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

A teraz nowy upstream został zapisany i mogę zbudować swoją następną rzecz :)

Josh.F
źródło
1
„Nie mogę znaleźć sposobu [...] --set-upstream” - Być może powinieneś spróbować przeczytać odpowiedź
Tarsiusa
jasne, to pomogło mi to rozgryźć. Po prostu magittrochę się zmieniło od tamtej pory i mam nadzieję, że moje rozwiązanie zaoszczędzi komuś dodatkowe kilka minut
Josh.F,
1
Pierwszy akapit tej odpowiedzi wyjaśnia, jak zmienić upstream, i działa w najnowszej wersji.
npostavs