2015-06-19 20 views
12

Qualcun altro nel mio team ha creato un nuovo ramo git, commesso e inviato al solito telecomando con cui lavoriamo. Quando provo a controllare questo ramo, ottengo questo:git: fatale: Impossibile passare a un non commit '12382'

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

non ho avuto problemi check-out altri rami di questa repository; ho provato a controllarne un'altra subito dopo (una che non avevo una copia locale di), e ha funzionato bene.

Ho provato a creare un server con questo ramo sulla nostra pipeline Go, ha funzionato correttamente - il che significa che il server ha avuto successo nel controllare quel ramo.

provato questo per verificare lo stato delle cose:

% 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': 
... 

Qualcuno potrebbe suggerire come risolvere questo problema? Che cosa è andato storto?

risposta

14

Git è confuso, perché 12382 sembra un hash di commit. Utilizzare il nome completo alla cassa della filiale:

git checkout refs/heads/12382 -- 

o, se si tratta di una filiale remota:

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

grazie per la risposta, ma tutte le nostre filiali sono 5 numeri a due cifre che sembrano hash, e questo ha sempre funzionato bene. Ho appena provato il comando suggerito, ha dato "errore: pathspec 'refs/heads/12382' non corrispondeva a nessun file noto per git." – zaphodb

+0

Prova 'git checkout refs/heads/12382 --'.Inoltre, supponendo che tu non abbia ancora una filiale locale, devi usare 'refs/remotes/origin/12382' (forse semplicemente' origin/12382' funziona pure) – knittl

+0

Aspetta, il comando remoto sembra funzionare: git checkout refs/telecomandi/origine/12382 – zaphodb

9

@knittl: grazie che hanno lavorato, aveva a che fare le ulteriori seguenti fasi:

% 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

Si potrebbe aver appena eseguito 'git checkout -b 12382 - refack/remotes/origin/12382' in un solo passaggio;) – knittl

0

La domanda è un caso limite ed è già stata data una risposta.

Risponderò l'errore su un livello più generale:


Per essere in grado di passare/checkout a qualcosa nel proprio albero dei sorgenti deve essere di tipo:

  • commit: git checkout: 90392aeda17d730d472493bc5a36237407c80979 o forse solo fare le prime 7 cifre `` git checkout: 90392ae`
  • tag git checkout V2.0.3
  • ramo (filiali remote troppo) 012.303.556,85 mila
  • HEAD git checkout HEAD^1
  • Hash, Hash breve.

Quindi, se stai passando a qualcosa che non è nessuno di loro, come hai digitato male il nome del tuo ramo, git ti darebbe questo errore.

non possono passare ramo a un non-commit significa che la pensano che si sta tentando di cassa a qualcosa che non è tree-ish

Problemi correlati