„Nie można zaktualizować ścieżek i jednocześnie przejść do oddziału”

186

Czasami używam checkout -bopcji, aby utworzyć nowy oddział, sprawdzić go w tym samym czasie i skonfigurować śledzenie w jednym poleceniu.

W nowym środowisku pojawia się ten błąd:

$ git checkout -b test --track origin/master
fatal: Cannot update paths and switch to branch 'test' at the same time.
Did you intend to checkout 'origin/master' which can not be resolved as commit?

Dlaczego Gitowi się to nie podoba? To kiedyś działało z tym samym repozytorium.

marekful
źródło
6
Komunikat o błędzie informuje, że origin/masternie jest to identyfikator zatwierdzenia, tj. Niepoprawna gałąź zdalna. Czy to pokazuje w git branch -rwynikach?
trek
Nie udało się. Okazuje się, że nie sprawdziłem wszystkich zdalnych gałęzi podczas klonowania.
marekful
możliwy duplikat kasy Git na zdalnym oddziale nie działa
JuJoDi

Odpowiedzi:

199

' origin/master', którego nie można rozwiązać jako zatwierdzenia

Dziwne: musisz sprawdzić swoje piloty:

git remote -v

I upewnij się, że originzostanie pobrany:

git fetch origin

Następnie:

git branch -avv

(aby sprawdzić, czy pobrałeś origin/masteroddział)

Na koniec użyj git switchzamiast mylącegogit checkout , z Git 2.23+ (sierpień 2019).

git switch -c test --track origin/master
VonC
źródło
11
W poleceniu miałem literówkę, która spowodowała ten błąd; Nie pisałem poprawnie mojego pilota!
qix
2
To była nowa gałąź i moje lokalne repozytorium nie wiedziało o tym. Musiałem zrobić pulla potem to polecenie zadziałało.
coding_idiot
2
Ta odpowiedź była pomocna, ponieważ pokazała mi, że dzieje się naprawdę coś dziwnego: piloty są ustawione poprawnie, ale nowa zdalna gałąź po prostu nie jest pobierana. Kiedy klonuję pilota w czystym katalogu, działa. Czy mój .gitkatalog może być w jakiś sposób uszkodzony?
Konrad Rudolph,
git remote -v zwrócił błąd krytyczny: Niepoprawna nazwa obiektu: „remote”.
Karim Samir,
@KarimSamir możesz zadać osobne pytanie (z systemem operacyjnym i wersją git), ponieważ git remote -vwykonywane w repozytorium git działa.
VonC
79

FWIW: Jeśli masz literówkę w nazwie gałęzi, otrzymasz ten sam błąd.

Ludder
źródło
4
Właściwie byłoby miło, gdyby ktoś poświęcił czas na poinformowanie programistów Git o tym, komunikat o błędzie nie jest zbyt pouczający;)
Scorchio
8
tak, to był mój problem, miałem miejsce w nazwie mojego oddziału
Karim Samir
To samo tutaj, próbowałem git checkout -b origin mybranchzamiast git checkout -b mybranch(extra origin)
Guillaume Renoult
Skopiowałem i wkleiłem nazwę oddziału, a po nazwie oddziału miałem końcowe białe znaki, co spowodowało ten błąd.
learningKnight
orgin/my-branchZamiast tego próbowałem zrobić kasę origin/my-branch. iNie trafiłem jednego i przez chwilę drapałem się po głowie, żeby zrozumieć, dlaczego stary sojusznik nie chce się dogadać. Literówka rzeczywiście była problemem.
DDM
55

Ten błąd można uzyskać w kontekście np. Kompilacji Travis, która domyślnie sprawdza kod git clone --depth=50 --branch=master. Według mojej najlepszej wiedzy możesz kontrolować --depthza pośrednictwem, .travis.ymlale nie za pośrednictwem --branch. Ponieważ powoduje to, że tylko jeden oddział jest śledzony przez pilota, musisz niezależnie zaktualizować pilota, aby śledzić referencje żądanego pilota.

Przed:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master

Poprawka:

$ git remote set-branches --add origin branch-1
$ git remote set-branches --add origin branch-2
$ git fetch

Po:

$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/branch-1
remotes/origin/branch-2
remotes/origin/master
Bob Aman
źródło
5
Rozwiązałem to dla mnie. Użyłem płytkiego klonu --depth = 1 i właśnie tego potrzebowałem do zmiany gałęzi.
Sawtaytoes,
1
O tak, głębia z pewnością powoduje ten błąd! Jeśli to możliwe, sugerowałbym edytowanie pierwszych kilku zdań w celu podkreślenia głębi.
Dubslow,
19

Ta prosta rzecz działała dla mnie!

Jeśli mówi, że nie można zrobić dwóch rzeczy jednocześnie, rozdziel je.

git branch branch_name origin/branch_name 

git checkout branch_name
Ashwini Reddy
źródło
Ułatwia ustalenie, na czym polega prawdziwy problem
Z. Khullah
9

Gdy natkniesz się na ten problem, możesz wykonać następujące kroki:

  1. Uruchom następujące polecenie, aby wyświetlić listę gałęzi znanych z lokalnego repozytorium.

git zdalne wyświetlanie pochodzenia

co daje to:

 remote origin
  Fetch URL: <your_git_path>
  Push  URL: <your_git_path>
  HEAD branch: development
  Remote branches:
    development                             tracked
    Feature2                                tracked
    master                                  tracked
    refs/remotes/origin/Feature1         stale (use 'git remote prune' to remove)
  Local branches configured for 'git pull':
    Feature2     merges with remote Feature2
    development  merges with remote development
    master       merges with remote master
  Local refs configured for 'git push':
    Feature2     pushes to Feature2     (up to date)
    development  pushes to development (up to date)
    master       pushes to master      (local out of date)
  1. Po sprawdzeniu takich szczegółów, jak (pobierz adres URL itp.), Uruchom to polecenie, aby pobrać dowolną nową gałąź (tj. Którą możesz chcieć pobrać w lokalnym repozytorium), która istnieje na komputerze zdalnym, ale nie w lokalnej.
» git remote update

Fetching origin
From gitlab.domain.local:ProjectGroupName/ProjectName
 * [new branch]      Feature3    -> Feature3

Jak widać nowy oddział został pobrany ze zdalnego.
3. Na koniec sprawdź gałąź za pomocą tego polecenia

» git checkout -b Feature3 origin/Feature3

Branch Feature3 set up to track remote branch Feature3 from origin.
Switched to a new branch 'Feature3'

Nie jest konieczne jawne polecenie Gitowi śledzenia (za pomocą --track ) oddziału za pomocą pilota.

Powyższe polecenie spowoduje ustawienie gałęzi lokalnej na śledzenie gałęzi zdalnej od początku.

ssasi
źródło
4

Jeśli masz białą spację w oddziale, pojawi się ten błąd.

Dansek
źródło
1

Dla mnie musiałem dodać pilota:

git remote -add myRemoteName('origin' in your case) remoteGitURL

wtedy mógłbym pobrać

git fetch myRemoteName
RayLoveless
źródło
1

Powoduje to, że lokalny oddział nie śledzi zdalnego oddziału. Jak powiedział ssasi, musisz użyć następujących poleceń:

git remote update
git fetch
git checkout -b branch_nameA origin/branch_nameB

Właśnie rozwiązałem mój problem ....

questionKing
źródło
0

Najpierw musisz przejść Fetchdo zdalnego (konkretnej gałęzi), a następnie możesz utworzyć lokalny br i śledzić go za pomocą tej zdalnej gałęzi za pomocą polecenia (tj. checkoutZ -b i --track).

Raheel Hasan
źródło
0

Powinieneś przejść do podmodułu dir i uruchomić git status.

Możesz zobaczyć, że wiele plików zostało usuniętych. Możesz biegać

  1. git reset .

  2. git checkout .

  3. git fetch -p

  4. git rm --cached submodules // submoudles to twoje imię

  5. git submoudle add ....

knight2016
źródło
0

Możesz użyć tych poleceń: git zdalna aktualizacja, git fetch, git checkout -b nazwa_oddziału Pochodzenie: nazwa_oddziałuB

Myślę, że może to dlatego, że lokalny oddział nie może śledzić zdalnego oddziału

kang
źródło