Pytanie Czy istniejąca gałąź Git utworzy zdalną gałąź?


Wiem, jak stworzyć nowy oddział, który śledzi odległe gałęzie, ale w jaki sposób uczynić istniejącą ścieżkę oddziału zdalną gałęzią?

Wiem, że mogę po prostu edytować .git/config plik, ale wydaje się, że powinien być łatwiejszy sposób.


3080
2018-02-06 15:14


pochodzenie


Jak wspomniano poniżej, dla istniejącej gałęzi można użyć git push -u origin branch-name. - Zags
Na przykład, git branch dokumentacja.
Jeśli lokalny oddział jest bieżącą gałęzią, a lokalny oddział jeszcze nie śledzi zdalnego, git pull często dostarcza pomocnych wiadomości o odpowiednim poleceniu, aby ustawić informacje o śledzeniu - billrichards
To denerwujące, gdy ktoś uczy się git, aby pokazać link do dokumentacji git. Ta dokumentacja wydaje się być napisana dla ludzi już wiesz, co robią z git. - Felipe Alvarez
od Git 2.10 powinieneś najpierw sprawdzić w lokalnym oddziale, a następnie to zrobić git branch --set-upstream-to origin/<branch> - Mahdi Javaheri


Odpowiedzi:


Biorąc pod uwagę oddział foo i pilotem upstream:

Począwszy od Git 1.8.0:

git branch -u upstream/foo

Lub, jeśli oddział lokalny foo nie jest bieżącym oddziałem:

git branch -u upstream/foo foo

Lub, jeśli chcesz wpisać dłuższe polecenia, są one równoważne powyższym dwóm:

git branch --set-upstream-to=upstream/foo

git branch --set-upstream-to=upstream/foo foo

Począwszy od Git 1.7.0:

git branch --set-upstream foo upstream/foo

Uwagi:

Wszystkie powyższe polecenia spowodują lokalny oddział foo śledzić zdalny oddział foo z pilota upstream. Stara składnia (1.7.x) jest przestarzała na korzyść nowej składni (1.8+). Nowa składnia ma być bardziej intuicyjna i łatwiejsza do zapamiętania.


Zobacz też: Dlaczego muszę ciągle wykonywać `--set-upstream`?


3752
2018-02-18 03:06



Czy "upstream" to nazwa zdalnego? tj. co domyślnie nazwałoby "pochodzenie"? - Andrew Vit
@Andrew: Tak. git branch --set-upstream master origin/master byłby równoważny z tym, co jest automatycznie robione podczas początkowego klonowania repozytorium. - Dan Moulding
W powiązanej notatce dodanie tego do twojego gitconfig jest niesamowite: "[push] default = tracking" spowoduje to, że pushy pójdą w tym samym miejscu co pulls from :) - jpswain
Otrzymuję "fatal: nie jest prawidłową nazwą obiektu:" origin / master "." - joachim
git push -u origin foo  przez - Cotton


Możesz wykonać następujące czynności (zakładając, że jesteś wyrejestrowany na master i chcesz przesłać do zdalnego master'a):

Skonfiguruj "zdalny", jeśli już go nie masz

git remote add origin ssh://...

Teraz skonfiguruj mastera, aby wiedział, że chcesz śledzić:

git config branch.master.remote origin
git config branch.master.merge refs/heads/master

I naciśnij:

git push origin master

206
2018-03-09 08:50



to naprawdę jest wymagane od pilota i oddziału w push? Chodzi mi o to, że potrzebujesz go tylko, jeśli Twój wyrejestrowany oddział nie jest tym, który chcesz wypchnąć, prawda? - Doppelganger
Tak, ale z pamięci może być konieczne jednoznaczne pierwsze naciśnięcie. Można łatwo sprawdzić oczywiście ... :) - Paul Hedderly
+1 Jest to odpowiedź dla użytkowników Windowsa, którzy utknęli z "podglądem" msysgit, który jest przed 1.8. Dziękuję za to. - John
To jest jedyna odpowiedź, która sprawdziła się u mnie. Kiedy spróbowałem zaakceptowanej odpowiedzi, aby ustawić zdalnego pilota dla istniejącej gałęzi, otrzymałem: error: the requested upstream branch 'upstream/master' does not exist. - Steve K
@SteveK to najprawdopodobniej dlatego, że nazywa się Twój upstream origin i nie upstream. - umläute


Robię to jako efekt uboczny pchania z -u opcja jak w

$ git push -u origin branch-name

Równoważna długa opcja to --set-upstream.

The git-branch polecenie również rozumie --set-upstream, ale jego użycie może być mylące. Wersja 1.8.0 modyfikuje interfejs.

git branch --set-upstream jest przestarzałe i może zostać usunięte w stosunkowo odległej przyszłości. git branch [-u|--set-upstream-to] został wprowadzony z dokładniejszą kolejnością argumentów.

...

Kuszące było mówić git branch --set-upstream origin/master, ale to mówi Gitowi, aby zorganizował lokalny oddział "origin / master" do integracji z obecnie wyewidencjonowanym oddziałem, co jest bardzo mało prawdopodobne, co miał na myśli użytkownik. Ta opcja jest przestarzała; użyj nowego --set-upstream-to (z krótkim i słodkim -u) zamiast tego.

Powiedz, że masz lokalny foo gałąź i chcą traktować oddział pod tą samą nazwą, co jego upstream. Zrób to z pomocą

$ git branch foo
$ git branch --set-upstream-to=origin/foo

Lub tylko

$ git branch --set-upstream-to=origin/foo foo

130
2017-10-02 16:24



To o wiele lepsze rozwiązanie imo - Nils_e


Możesz znaleźć git_remote_branch narzędzie przydatne. Oferuje proste polecenia do tworzenia, publikowania, usuwania, śledzenia i zmiany nazw oddziałów zdalnych. Jedną fajną cechą jest to, że możesz poprosić o grb Polecenie, aby wyjaśnić, jakie polecenia Git wykona.

grb explain create my_branch github
# git_remote_branch version 0.3.0

# List of operations to do to create a new remote branch and track it locally:
git push github master:refs/heads/my_branch
git fetch github
git branch --track my_branch github/my_branch
git checkout my_branch

51
2018-02-06 17:11



jest grb standardowe polecenie? Dostępne w jakim pakiecie? - Jaseem
grb jest rubinowym klejnotem, do którego można uzyskać dostęp, jak wyjaśniono poniżej ich github - mcabrams
PO stawia pytanie o samego Gita. Więc nie wprowadzenie nowego narzędzia prawdopodobnie byłoby lepsze. - zeekvfu
grb jest aliasem dla git-rebase na mojej instalacji macOS. Nie zrobiłem tego :) - highmaintenance


Właściwie za zaakceptowaną odpowiedź do pracy:

git remote add upstream <remote-url>
git fetch upstream
git branch -f --track qa upstream/qa
# OR:
git branch --set-upstream qa upstream/qa

49
2017-11-23 12:08



Lokalny oddział już śledzi oddział, więc możemy założyć, że zdalne repo zostało już dodane. - Doppelganger
Dopplerganger: Zobacz komentarz Joachima do zaakceptowanej odpowiedzi. W każdym razie założenia łatwo się różnią - to, co czyni rzeczy tak interesującymi;) - Hedgehog


Wierzę, że już w Git 1.5.x mógłbyś stworzyć lokalny oddział $BRANCH śledzić zdalny oddział origin/$BRANCH, lubię to.

Jeśli się uwzględni $BRANCH i origin/$BRANCH istnieje, a obecnie nie wyrejestrowany $BRANCH (wyłącz, jeśli masz), wykonaj:

git branch -f --track $BRANCH origin/$BRANCH

To się odtwarza $BRANCH jako gałąź śledzenia. The -f wymusza stworzenie pomimo $BRANCH już istniejący. --track jest opcjonalny, jeśli domyślne ustawienia są ustawione (to jest parametr git-config branch.autosetupmerge jest prawdziwy).

Uwaga, jeśli origin/$BRANCH jeszcze nie istnieje, możesz go utworzyć, przesuwając swój lokalny $BRANCH do zdalnego repozytorium za pomocą:

git push origin $BRANCH

Następnie poprzednia komenda promująca lokalny oddział w gałęzi śledzenia.


40
2017-07-28 09:33



git push origin $BRANCHbyło to, czego szukałem. - User
Po wypróbowaniu różnego rodzaju rozwiązań, w tym konfiguracji wyżej opisanego powyżej, nic nie działało. Wszystko, co chciałem zrobić, to pobrać 1 nowy commit do mojej lokalnej odleglejszej oddziału i początkowo nie konfigurowałem śledzenia. Komenda git branch -f --track $BRANCH origin/$BRANCH Zrób sztuczkę. - DemitryT


1- zaktualizuj lokalne metadane, używając: git fetch - all

enter image description here

2 - pokaż swoje zdalne i lokalne oddziały za pomocą: git branch -a , zobacz poniższy zrzut ekranu

enter image description here

3 - przejdź do gałęzi docelowej, którą chcesz połączyć z pilotem: używając

git checkout branchName

przykład:

enter image description here 

4- Połącz swój lokalny oddział ze zdalnym oddziałem, używając:

git branch --set-upstream - do nameOfRemoteBranch

N.B: nameOfRemoteBranch : kopiować z wyjścia z kroku 2 "git branch -r"

Przykład użycia:

enter image description here


28
2018-06-06 14:21



Zadziałało. Dziękuję Ci - Rahal Kanishka
W większości łatwa i prosta odpowiedź. - vibs2006


Upewnij się, że uruchamiasz:

git config push.default tracking

aby móc bez problemu popychać


22
2017-08-29 21:38



To może być wygodne. Możemy jednak zauważyć, że według git-config(1) strona manuala, tracking jest przestarzałym synonimem upstream. - FooF