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 (git@github.com:.../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 (git@github.com:.../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ć).

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")

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.


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


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 :)


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.