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ę?


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

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

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ę


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

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


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.


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.


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

2

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

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


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.


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.

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.