Zastanawiałem się, czy istnieje łatwy sposób na wypchnięcie i ściągnięcie lokalnej gałęzi ze zdalną gałęzią o innej nazwie bez konieczności podawania obu nazw.
Na przykład:
$ git clone myrepo.git
$ git checkout -b newb
$ ...
$ git commit -m "Some change"
$ git push origin newb:remote_branch_name
Teraz, jeśli ktoś zaktualizuje remote_branch_name, mogę:
$ git pull
I wszystko jest scalane / przewijane do przodu. Jeśli jednak wprowadzę zmiany w moim lokalnym „newb”, nie mogę:
$ git push
Zamiast tego muszę:
% git push origin newb:remote_branch_name
Wydaje się trochę głupie. Jeśli git-pull
używa git-config branch.newb.merge
do określenia, skąd należy pobrać, dlaczego nie można git-push
mieć podobnej opcji konfiguracji? Czy jest do tego fajny skrót, czy powinienem po prostu kontynuować długą drogę?
źródło
git push buildserver .:test_this
gdzie.
będzie nazwa lokalnego oddziału, której niekoniecznie znam. Mógłbym to sprawdzić, jasne, ale gdyby była do tego krótka ręka, taka jak kropka, byłoby fajnie.HEAD
to skrót, którego szukasz.HEAD
jest tym, co wskazuje na aktualnie pobraną gałąź lub bezpośrednio na konkretny commit, jeśli masz odłączoną głowę.Updates were rejected because a pushed branch tip is behind its remote
błąd. Moje lokalne repozytorium było aktualne, ale nazwy były po prostu inne.Po wykonaniu początkowego wypychania dodaj parametr -u :
Kolejne pchnięcia pójdą tam, gdzie chcesz.
EDYTOWAĆ:
Zgodnie z komentarzem, to tylko ustawia pull.
powinien to zrobić.
źródło
-u
po prostu ustawia upstream, który zgodnie z pytaniem jest już ustawiony. Musi ustawićpush.default
naupstrem
, aby uzyskaćpush
zgodność z ustawieniem nadrzędnym, ponieważ domyślniepull
tak jest.git branch --set-upstream
jest to konieczne. Uwaga: mygit --version
to 2.17.1.Polecenie Adama jest teraz przestarzałe. Możesz użyć:
aby ustawić gałąź upstream of
my_local_branch
toorigin/my_remote_branch
.źródło
Oto proces, który zadziałał dla mnie.
Teraz twoje nowe repozytorium będzie „początkowe”, a oryginalne repozytorium „nadrzędne”. Potwierdź to, uruchamiając git remote -v. (Nota boczna: Upstream jest używany do pobierania z oryginalnego repozytorium - aby zachować synchronizację lokalnej kopii z projektem, do którego chcesz wnieść swój wkład - a źródło jest używane do pobierania i wypychania, ponieważ możesz wnieść wkład do własnego repozytorium).
git push origin master
Teraz master twojego nowego zdalnego repozytorium (na Github) będzie zsynchronizowany z oryginalnym masterem, ale nie będzie miał żadnej z gałęzi funkcji.
Rebase to inteligentne połączenie. Następnie naciśnij ponownie, aby przejść do mastera, a zobaczysz wybraną gałąź funkcji jako główną w nowym repozytorium.
Opcjonalny:
źródło
Od jakiegoś czasu napotykam ten sam problem. W końcu mam zestaw oświadczeń, więc nie muszę tego robić za
git push origin local:remote
każdym razem. Śledziłem te:Po ustawieniu upstream do zdalnej gałęzi o innej nazwie (pierwsza linia), a następnie ustawieniu tego upstream jako domyślnego (druga linia), trzecia linia będzie teraz przestrzegać tych reguł i będzie przekazywać do skonfigurowanego upstream.
źródło