2012-05-13 36 views
26

mentre si tira nel mio repository git dal nostro server centrale, questo errore si è verificato:non può tirare, git non può risolvere riferimento ORIG_HEAD

$ git pull origin master 

From http://aaa/repo 
* branch   master  -> FETCH_HEAD 
error: unable to resolve reference ORIG_HEAD: No such file or directory 
fatal: Cannot lock the ref 'ORIG_HEAD'. 

Ho provato git gc (con --prune = ora) e alla ricerca di un errore simile, sfortunatamente senza fortuna.

+0

forse potresti considerare la domanda di Brian come la risposta corretta, visto che ha molti più voti? –

risposta

82

Ho avuto questo problema, e l'ho risolto rimuovendo il file .git/ORIG_HEAD e poi facendo di nuovo il pull. Il file .git/ORIG_HEAD era 0 byte invece del riferimento git che avrebbe dovuto contenere, quindi mi sono appena sbarazzato di esso.

+0

Qualche idea su cosa causa questo problema? – earthmeLon

+0

@earthmeLon non ne sono sicuro. Forse un problema di filesystem. –

+0

La rimozione di questo problema ha risolto anche la fastidiosa richiesta di password su ogni push/pull – RayLoveless

9

Controllare lo git remote prune origin indicato in aggiunta allo git gc --prune=now in "git pull fails “unalble to resolve reference” “unable to update local ref”".

Se si dispone di un .git/rebase-merge, prendere in considerazione la rimozione di esso (come in "git rebase and deleted rebasing branches causing “Interactive rebase already started” error message")

Controllare anche il contenuto di .git/HEAD, come in this issue.

Se si tratta di una corruzione repo di qualche tipo (vedi "Git corrupt master branch"), provare per primo a clonare di nuovo il pronti contro termine, e riapplicare le modifiche attuali in cima a quello dei pronti contro termine (attraverso git format-patch se è necessario)

+1

Grazie, purtroppo nessuna delle correzioni menzionate ha funzionato, quindi ho dovuto ripetere la clonazione e applicare la patch. – vvondra

8

Questa risposta non risolve il problema dell'OP, ma risolve uno simile.

ho avuto un problema simile (ho ottenuto error: cannot lock ref ... is at ... but expected ...), ma era perché c'erano due rami del pronti contro termine con lo stesso nome, ma con caso diverso. Forse questa risposta potrebbe aiutare le persone che arrivano qui, non sono stato in grado di trovare una risposta altrove. Ho eliminato uno dei rami, quindi ho eliminato il riferimento corrispondente da: .git/ref/.../branch_name, quindi git pull. Ciò accade a causa del mio lavoro su un file system insensibile alle maiuscole e minuscole, mentre i due rami sono stati inseriti in un file system sensibile al maiuscolo/minuscolo.

Ad esempio, i due rami sono BRANCH1 e branch1 e sono entrambi sotto il origin remoto. Innanzitutto, elimina uno dei rami, ad esempio BRANCH1. Quindi rimuovere la sua ref:

rm .git/refs/remotes/origin/BRANCH1 

Poi git pull, e dovrebbe andare bene.

+0

Questo mi ha aiutato. Grazie per la pubblicazione. – dima

1

Questo file viene creato quando si git pull in un repository al fine di non git pull nello stesso repository più di quelli in quel momento e viene eliminato quando il processo è terminato. Se il processo muore o diventa uno zombie, il file non viene rimosso e devi controllare manualmente se il processo git esiste ancora. Se il processo non esiste, è necessario eliminare il file e provare di nuovo a git pull.

Problemi correlati