2015-06-19 22 views
12

Ktoś inny w moim zespole stworzył nowy oddział git, zatwierdzony i popchnięty do zwykłego pilota, z którym współpracujemy. Kiedy próbuję sprawdzić tę gałąź, otrzymuję:git: fatal: Nie można przełączyć gałęzi na niezapisaną '12382'

% git checkout 12382 
fatal: Cannot switch branch to a non-commit '12382' 

Nie miałem problemów ze sprawdzaniem innych oddziałów z tego repozytorium; próbowałem sprawdzić inny zaraz po tym (jeden, że nie miałem lokalnej kopii) i działało dobrze.

Próbowałem zbudować serwer z tym oddziałem na naszym rurociągu Go, to działało bez zarzutu - co oznacza, że ​​serwer pomyślnie sprawdził tę gałąź.

Tried to, aby sprawdzić stan rzeczy:

% git remote show origin 
* remote origin 
    Fetch URL: [email protected]:mycompany/myrepository.git 
    Push URL: [email protected]:mycompany/myrepository.git 
    HEAD branch: stage 
    Remote branches: 
    10112      tracked 
    10198      tracked 
    10678      tracked 
... 
    12382      tracked <<<--- 
... 
    Local branches configured for 'git pull': 
... 
    Local refs configured for 'git push': 
... 

Czy ktoś sugerują, jak to naprawić? Co poszło nie tak?

Odpowiedz

14

Git jest zdezorientowany, ponieważ 12382 wygląda jak skrót mieszania. Użyj w pełni kwalifikowanej nazwy do kasy oddziału:

git checkout refs/heads/12382 -- 

lub, jeśli jest to odległy oddział:

git checkout refs/remotes/origin/12382 -- 
+0

dzięki za odpowiedź, ale wszystkie nasze oddziały są 5-cyfrowy numer, które wyglądają jak skrótów, i to zawsze działało dobrze. Po prostu wypróbowałem sugerowane polecenie, podałem "error: pathspec" refs/heads/12382 "nie pasowało do żadnego pliku znanego z git." – zaphodb

+0

Spróbuj 'git checkout refs/heads/12382 -'.Ponadto, zakładając, że nie masz jeszcze lokalnego oddziału, musisz użyć 'refs/remote/origin/12382' (może po prostu' origin/12382' również działa) – knittl

+0

Czekaj, zdalna komenda wydaje się działać: git checkout refs/zdalne/origin/12382 – zaphodb

9

@knittl: dzięki, że pracowali, mieli wykonać następujące dodatkowe czynności:

% git checkout refs/remotes/origin/12382 
Note: checking out 'refs/remotes/origin/12382'. 

You are in 'detached HEAD' state. You can look around, make experimental 
changes and commit them, and you can discard any commits you make in this 
state without impacting any branches by performing another checkout. 

If you want to create a new branch to retain commits you create, you may 
do so (now or later) by using -b with the checkout command again. Example: 

    git checkout -b new_branch_name 

HEAD is now at 2d834e4... 

% git branch | grep 12382 
* (detached from origin/12382) 

% git checkout -b 12382 
Switched to a new branch '12382' 

% git status 
On branch 12382 
nothing to commit, working directory clean 

% git push --set-upstream origin 12382 
Branch 12382 set up to track remote branch 12382 from origin. 
Everything up-to-date 
+7

Mogłeś właśnie zrobić "git checkout -b 12382 - track refs/remote/origin/12382" w jednym kroku;) – knittl

0

Pytanie jest bardzo ważne i zostało już udzielone.

Odpowiem błąd na poziomie bardziej ogólnym:


aby móc przełączyć/kasę na coś w drzewie źródłowym musi być typu:

  • popełnienia: git checkout: 90392aeda17d730d472493bc5a36237407c80979 a może po prostu zrobić pierwsze 7 cyfr `git checkout: 90392ae`
  • tag git checkout V2.0.3
  • oddział (zdalnych oddziałów zbyt) git checkout newLogin
  • GŁOWA git checkout HEAD^1
  • Hash, krótki Hash.

Więc jeśli przechodzisz na coś, co nie jest żadnym z nich, tak jak błędnie wpisałeś nazwę oddziału, git dałby ci ten błąd.

Nie można przełączyć oddziału non-commit oznacza uważasz próbują kasy na coś, co nie jest tree-ish