tag git checkout, git pull kończy się niepowodzeniem w gałęzi

134

Sklonowałem repozytorium git, a następnie pobrałem tag:

# git checkout 2.4.33 -b my_branch

To jest w porządku, ale kiedy próbuję uruchomić git pullw moim oddziale, git wypluwa ten błąd:

Brak informacji o śledzeniu dla bieżącego oddziału. Określ oddział, z którym chcesz się połączyć. Szczegółowe informacje można znaleźć w git-pull (1)

git pull <remote> <branch>

Jeśli chcesz ustawić informacje o śledzeniu dla tej gałęzi, możesz to zrobić za pomocą:

git branch --set-upstream new origin/<branch>

Chcę git pulltylko zaktualizować gałąź główną i zostawić moją obecną gałąź w spokoju (i tak jest to tag). Czy coś takiego jest możliwe?

Powodem tego jest to, że mam automatyczny skrypt, który zawsze git ściąga repozytorium i oczywiście kończy się niepowodzeniem z powodu powyższego błędu.

alesko
źródło

Odpowiedzi:

115

Edycja: w przypadku nowszych wersji Git --set-upstream masterzostał wycofany, --set-upstream-tozamiast tego należy użyć :

git branch --set-upstream-to=origin/master master

Zgodnie z monitem możesz po prostu uruchomić:

git branch --set-upstream master origin/master

Następnie możesz po prostu uruchomić git pullaktualizację kodu.

Vincent Wen
źródło
5
To rozwiązało problem. Ale wciąż muszę zrozumieć, jak moja gałąź główna straciła odniesienie do pochodzenia. Byłem na gałęzi i to zrobiłem git checkout master. Nie mogłem tego zrobić, git pullponieważ utracono odniesienie do pochodzenia. Teraz działa. Dziękuję Ci!
Ariel
`` git branch --set-upstream-to = origin / master master my_branch '' działał dla mnie
Blue Clouds
90

Miałem ten sam problem i naprawiłem go tym poleceniem:

$ git push -u origin master

Z pliku pomocy -u w zasadzie ustawia wartość domyślną dla pull:

-u, --set-upstream`

  For every branch that is up to date or successfully pushed, add 
  upstream (tracking) reference, used by argument-less git-pull(1) and
  other commands. For more information, see branch.<name>.merge in 
  git-config(1).
Simon Raik-Allen
źródło
48

Wypróbuj te polecenia:

git pull origin master
git push -u origin master
marynarki
źródło
9

Wróć do gałęzi głównej za pomocą

$ git checkout master

a następnie uruchom git pulloperację

$ git pull origin/master

Następnie możesz wrócić do swojego my_branch.

cfedermann
źródło
6
Właśnie tego staram się uniknąć. Chciałem wiedzieć, czy można to zrobić w „oficjalny” sposób.
alesko
5

@alesko : nie można zrobić tylko git pullpo kasie, my_branchaby zaktualizować mastertylko oddział.
Ponieważ git pullzostanie również scalony z bieżącą gałęzią -> w Twoim scenariuszu zmy_branch

@Simon : to wystarczy. dlaczego?

$ git branch -u origin/master
Branch master set up to track remote branch master from origin.

i według dokumentów:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.
Casey
źródło
4

Najpierw upewnij się, że jesteś na właściwej gałęzi.
Następnie (tylko raz):

git branch --track

Następnie to działa ponownie:

git pull
drzymała
źródło
4

Możesz mieć wiele oddziałów. A twoja obecna gałąź nie ustawiła swojego upstream w zdalnym.

Kroki, aby to naprawić:

git checkout branch_name
git branch --set-upstream-to=origin/remote_branch_name local_branch_name

na przykład

// this set upstream of local branch develop to remote branch  origin/develop,
git branch --set-upstream-to=origin/develop develop

Po zrobieniu tego, kiedy to zrobisz git pull, wyciąga z określonej gałęzi.

Eric Wang
źródło
4

Możesz określić, którą gałąź chcesz wyciągnąć:

git pull origin master

Lub możesz skonfigurować to tak, aby lokalna gałąź główna śledziła gałąź główną github jako nadrzędną:

git branch --set-upstream-to=origin/master master
git pull

To śledzenie gałęzi jest konfigurowane automatycznie, gdy klonujesz repozytorium (tylko dla domyślnej gałęzi), ale jeśli dodasz zdalne sterowanie do istniejącego repozytorium, musisz samodzielnie skonfigurować śledzenie. Na szczęście porady udzielone przez git sprawiają, że łatwo zapamiętać, jak to zrobić.

--set-upstream jest najwyraźniej przestarzałe w git 1.9.x. Idąc dalej, chciałbyś użyć czegoś takiego

git branch -u origin/master

zakładając, że sprawdziłeś już mistrza. Jeśli nie, git branch -u origin/master masterzadziała

Akash Kandpal
źródło
2

Spróbuj tego

git checkout master

git pull origin master
vanarajcs
źródło
2
To tak naprawdę nie jest odpowiedzią na pytanie. Chociaż nie ma akceptowanej odpowiedzi, ta z największą liczbą głosów jest o wiele bardziej odpowiednia jako odpowiedź na to stare pytanie
fejese
2

Jeśli tak jak ja musisz to robić przez cały czas, możesz ustawić alias, aby robił to automatycznie, dodając do swojego .gitconfigpliku:

[alias]
    set-upstream = !git branch --set-upstream-to=origin/`git symbolic-ref --short HEAD`

Kiedy zobaczysz komunikat There is no tracking information..., po prostu biegnij git set-upstream, a potem git pushponownie.

Dzięki https://zarino.co.uk/post/git-set-upstream/

rjmunro
źródło
1

Musisz skonfigurować śledzenie (upstream) dla bieżącej gałęzi

git branch --set-upstream master origin/master

Jest już przestarzałe, zamiast tego możesz użyć flagi --track

git branch --track master origin/master

Podoba mi się również odniesienie do dokumentu, które @casey zauważa:

-u <upstream>
  Set up <branchname>'s tracking information so <upstream> is considered  
  <branchname>'s upstream branch. If no <branchname> is specified,  
  then it defaults to the current branch.
Jorman Bustos
źródło
1

U mnie zadziałało: git branch --set-upstream-to = origin master. Kiedy ponownie wyciągnąłem polecenie, otrzymałem tylko aktualizacje od mastera i ostrzeżenie zniknęło.

Jason D.
źródło
0

Aby pobrać aktualizacje:

git fetch origin master

Jednak to tylko aktualizuje odwołanie o nazwie origin/master. Najlepszym sposobem na zaktualizowanie lokalnego masterbyłoby wyewidencjonowanie / scalenie wspomniane w innym komentarzu. Jeśli można zagwarantować, że lokalny masternie odbiegał od głównego pnia, która origin/masterjest włączona, to mógłby użyć git update-refdo mapowania prąd masterdo nowego punktu, ale to chyba nie jest najlepszym rozwiązaniem, aby używać regularnie ...

twalberg
źródło
0

To polecenie jest przestarzałe: git branch --set-upstream master origin/master

Tak więc, próbując skonfigurować śledzenie, to polecenie działało dla mnie:

git branch --set-upstream-to=origin/master master
Aaron Lelevier
źródło