Git Checkout: aktualizacja ścieżek jest niezgodna z przełączaniem gałęzi

467

Mój problem jest związany z błędem Fatal Git podczas przełączania gałęzi .

Próbuję pobrać gałąź zdalną za pomocą polecenia

git checkout -b local-name origin/remote-name

ale pojawia się ten komunikat o błędzie:

fatal: git checkout: aktualizacja ścieżek jest niezgodna z przełączaniem gałęzi.
Czy planowałeś wyewidencjonować „origin / remote-name”, którego nie można rozpoznać jako zatwierdzenie?

Jeśli ręcznie utworzę gałąź, a następnie wyciągnę gałąź zdalną, działa to tak samo, jak tworzenie nowego klonu i sprawdzanie gałęzi.

Dlaczego nie działa w repozytorium, z którym pracuję?

Ikke
źródło
1
co zmieniło się od pierwszego wystąpienia tego polecenia (wywołanie komunikatu o błędzie)?
VonC
git init git fetch git fetch git: //blabla.com/dir1/Project.git

Odpowiedzi:

739

Wydaje mi się, że dzieje się tak, gdy próbujesz wyewidencjonować zdalną gałąź, o której lokalne repozytorium git jeszcze nie wie. Próbować:

git remote show origin

Jeśli gałąź zdalna, którą chcesz pobrać, znajduje się w obszarze „Nowe gałęzie zdalne”, a nie „Śledzone gałęzie zdalne”, musisz je najpierw pobrać:

git remote update
git fetch

Teraz powinno działać:

git checkout -b local-name origin/remote-name
użytkownik167628
źródło
7
To rozwiązało problem, a nie powyższą arbitralną odpowiedź.
Jessedc,
21
Powinno to być „git fetch REPOSITORY_NAME”, aby uzyskać wszystkie gałęzie w tym repozytorium.
Mike Thomsen
1
niekoniecznie. git fetchotrzyma wszystkie gałęzie ze wszystkich zdalnych repozytoriów.
Michael Grinich,
4
Na wypadek, gdyby ktokolwiek zmagał się z tym całym szaleństwem: git fetch origin / branchname To nie to samo co git fetch. Pierwszy powoduje po prostu „nowy (następne pobieranie będzie przechowywane w pilotach / źródle)” wyświetlany w kolumnie widocznej za pomocą git zdalnego pokazu pochodzenia.
Alexander Kellett,
7
Jeśli próbujesz to zrobić dla pilota, który został jawnie dodany (a więc cokolwiek innego niż pochodzenie ), musisz to zrobić, git remote updatezanim pobieranie pobierze ten pilot. W przeciwnym razie otrzymujesz wiadomości, takie jak: Did you intend to checkout 'upstream-repo/master' which can not be resolved as commit?Dodaj to do odpowiedzi i zaoszczędź godziny pracy na czytaniu tych samych odpowiedzi, które działają tylko dla pochodzenia.
Bruno Bronosky
150

Alternatywna składnia,

git fetch origin remote_branch_name:local_branch_name
Rzadkie przyjemności
źródło
12
To zadziałało dla mnie. Nazwa mojego zdalnego oddziału nie jest początkiem. Nie wiem, czy to robi różnicę, ponieważ piłem wódkę.
Rimian,
13
To nie jest tylko alternatywna składnia, ale może działać, gdy git kasa -b nazwa_gałęzi pochodzenie / nazwa_gałęzi nie działa
ciasto kodowe
1
To rozwiązało również mój problem podczas uruchamiania „git checkout --track origin / remote-branch”, który pierwotnie dawał ten sam błąd co OP przed poprawką. Dzięki!
kakyo
1
Pracowałem dla mnie po uruchomieniu również sprawdzonej odpowiedzi.
AsTeR,
2
Tak, podejrzewam, że --depthkwalifikator oryginalnego klonu mógł być tutaj winny. Miałem sukces, git fetch remote_branch_name:local_branch_nameale wszystkie inne porady zawiodły.
John Kelleher
46

Po wypróbowaniu większości tego, co mogłem przeczytać w tym wątku, bez powodzenia, natknąłem się na ten: zdalna gałąź nie pojawia się w „git branch -r”

Okazało się, że mój plik .git / config był niepoprawny. Po wykonaniu prostej naprawy pojawiły się wszystkie gałęzie.

Idę z

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/master:refs/remotes/origin/master

do

[remote "origin"]
    url = http://stash.server.com/scm/EX/project.git
    fetch = +refs/heads/*:refs/remotes/origin/*

Wykonał lewę

PålOliver
źródło
4
To rzeczywiście dziwna konfiguracja. Mówi gitowi, aby pobierał tylko gałąź master ze zdalnego.
Ikke
3
Głosowałbym 10 razy, gdybym mógł! - wydaje się, że jest to coś, co robi nowy git podczas klonowania
mpapis
2
Miałem ten sam problem, doprowadzał mnie do szału. Każdy, kto nie widzi zdalnych oddziałów, sprawdź to !!
Carlos Granados,
Dzięki Bogu za odpowiedź :)
Sacha
Umysł = rozwalony! Dziękuję Ci!
Chiranjib
12

Nie jestem pewien, czy jest to pomocne lub ściśle związane z pytaniem, ale jeśli próbujesz pobrać i pobrać tylko jedną gałąź ze zdalnego repozytorium, następujące polecenia git załatwią sprawę:

url= << URL TO REPOSITORY >>
branch= << BRANCH NAME >>

git init
git remote add origin $url
git fetch origin $branch:origin/$branch
git checkout -b $branch --track origin/$branch
VirtualStaticVoid
źródło
11

żadne z powyższych nie działało dla mnie. Moja sytuacja jest nieco inna, moja zdalna gałąź nie jest początkowa . ale w innym repozytorium.

git remote add remoterepo GIT_URL.git
git fetch remoterepo
git checkout -b branchname remoterepo/branchname

wskazówka: jeśli nie widzisz zdalnej gałęzi w poniższym wyjściu, git branch -v -anie ma możliwości jej sprawdzenia.

Potwierdzono pracę nad 1.7.5.4

Olivier Refalo
źródło
arf, po prostu uświadom sobie, że VirtualStaticVoid miał takie samo rozwiązanie!
Olivier Refalo
+1 za git branch -v -a: miałem niepoprawnie skonfigurowanego pilota, który powiedział, fetch = +refs/heads/*:refs/remotes/master/*mimo że pilot został wywołany upstream.
keflavich
7

Dla mnie zadziałało:

git fetch

Który ściąga wszystkie referencje do twojego komputera dla wszystkich gałęzi na pilocie. Wtedy mógłbym zrobić

git checkout <branchname>

i to działało idealnie. Podobne do najczęściej głosowanej odpowiedzi, ale nieco prostsze.

Matt
źródło
4

Podejrzewam, że nie ma zdalnej gałęzi o nazwie nazwa-zdalna, ale że przypadkowo utworzyłeś gałąź lokalną o nazwie pochodzenie / nazwa-zdalna.

Czy to możliwe, że w pewnym momencie napisałeś:

Początek / nazwa-zdalnego git

W ten sposób tworzysz lokalny oddział o nazwie origin / remote-name? Wpisz to polecenie:

git checkout origin / nazwa-zdalna

Albo zobaczysz:

Przełączono na gałąź „origin / remote-name”

co oznacza, że ​​to naprawdę źle nazwany oddział lokalny lub

Uwaga: przejście do „origin / rework-isscoring”, który nie jest oddziałem lokalnym
Jeśli chcesz utworzyć nowy oddział z tego kasy, możesz to zrobić
(teraz lub później), używając ponownie opcji -b z poleceniem kasy. Przykład:
  git checkout -b 

co oznacza, że ​​tak naprawdę jest to gałąź zdalna.

Don Branson
źródło
3

To nie jest bardzo intuicyjne, ale działa dobrze dla mnie ...

  mkdir remote.git & cd remote.git & git init
  git remote add origin $REPO
  git fetch origin $BRANCH:refs/remotes/origin/$BRANCH        

Następnie uruchom komendę git --track ...

  git branch --track $BRANCH origin/$BRANCH
Eddie B.
źródło
2

Miałem literówkę, a moja zdalna gałąź nie istniała

Służy git branch -ado wyświetlania zdalnych gałęzi

Tomasz
źródło
1

Czy twój problem może być powiązany z innym pytaniem SO „problem z kasą” ?

tj .: problem związany z:

  • stara wersja Git
  • ciekawa składnia kasy, która powinna brzmieć: git checkout -b [<new_branch>] [<start_point>]w [<start_point>]odniesieniu do nazwy zatwierdzenia, przy której należy uruchomić nową gałąź, i 'origin/remote-name'tak nie jest.
    (podczas git branchgdy obsługuje punkt początkowy będący nazwą zdalnego oddziału)

Uwaga: skrypt checkout.sh mówi:

  if test '' != "$newbranch$force$merge"
  then
    die "git checkout: updating paths is incompatible with switching branches/forcing$hint"
  fi

To tak, jakby składnia git checkout -b [] [nazwa_gałęzi_zdalnej] zarówno zmieniała nazwę gałęzi, jak i resetowała nowy punkt początkowy nowej gałęzi, co uznaje się za niezgodne.

VonC
źródło
Problem jest rozwiązany. git checkout -b nazwa-lokalna remote / remote-branch faktycznie działa
Ikke
1
Co ciekawe, co się zmieniło od pierwszego wystąpienia tego polecenia (wywołanie komunikatu o błędzie)?
VonC
1

Po pobraniu zillion razy jeszcze dodane piloty nie pojawiły się, chociaż obiekty BLOB były w puli. Okazuje się, że z jakiejkolwiek przyczyny nie należy podawać opcji --tagsgit remote add . Możesz ręcznie usunąć go z .git / config, aby git fetch utworzył odnośniki.

eMPee584
źródło