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.


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.


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

48

Wypróbuj te polecenia:

git pull origin master
git push -u origin master

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.


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.

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

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.


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


2

Spróbuj tego

git checkout master

git pull origin master

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/


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.

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.


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 ...


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
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.