2012-05-13 17 views
26

mientras tira en mi repositorio git de nuestro servidor central, este error ha ocurrido:no se puede tirar, Git no puede resolver ORIG_HEAD referencia

$ 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'. 

He intentado git gc (con --prune = ahora) y buscando un error similar, desafortunadamente sin suerte.

+0

quizás podría considerar marcar la pregunta de Brian como la respuesta correcta, ya que tiene muchos más votos. –

Respuesta

82

Tuve este problema, y ​​lo resolví quitando el archivo .git/ORIG_HEAD y luego volviendo a hacer el pull. El archivo .git/ORIG_HEAD tenía 0 bytes en lugar de la referencia de git que se suponía que contenía, así que me deshice de él.

+0

¿Alguna idea de lo que causa este problema? – earthmeLon

+0

@earthmeLon No estoy seguro. Tal vez un problema con el sistema de archivos. –

+0

Quitando esto también corrigió el molesto mensaje de contraseña en cada push/pull – RayLoveless

9

Compruebe el git remote prune origin mencionado además del git gc --prune=now en "git pull fails “unalble to resolve reference” “unable to update local ref”".

Si usted tiene un .git/rebase-merge, considerar la eliminación de ella (como en "git rebase and deleted rebasing branches causing “Interactive rebase already started” error message")

Comprobar también el contenido de .git/HEAD, como en this issue.

Si esto es una corrupción de recompra de algún tipo (véase "Git corrupt master branch"), intente primero en clonar tu repositorio de nuevo y volver a aplicar las modificaciones actuales en la parte superior de esa cesión temporal (a través de git format-patch si es necesario)

+1

Gracias, desafortunadamente ninguna de las correcciones mencionadas funcionó, así que tuve que volver a clonar y aplicar el parche. – vvondra

8

Esta respuesta no resuelve el problema del OP, pero resuelve uno similar.

tuve un problema similar (Tengo error: cannot lock ref ... is at ... but expected ...), pero era porque había dos sucursales en el repositorio con el mismo nombre, pero con diferente caso. Tal vez esta respuesta podría ayudar a las personas que llegan aquí, no pude encontrar una respuesta en otro lugar. Eliminé una de las ramas, y luego eliminé su referencia correspondiente de: .git/ref/.../branch_name, luego git tiró. Esto sucede debido a que trabajé en un sistema de archivos insensible a mayúsculas y minúsculas, mientras que las dos ramas se insertaban en un sistema de archivos con distinción entre mayúsculas y minúsculas. Por ejemplo, las dos ramas son BRANCH1 y branch1, y ambas están bajo control remoto origin. Primero, elimine una de las ramas, por ejemplo BRANCH1. A continuación, retire su ref:

rm .git/refs/remotes/origin/BRANCH1 

continuación git pull, y que debería estar bien.

+0

Esto me ayudó. Gracias por publicar. – dima

1

Este archivo se crea cuando git pull en un repositorio para no git pull en el mismo repositorio más de uno en ese momento y se elimina cuando el proceso finaliza. Si el proceso muere o se convierte en un zombi, entonces el archivo no se elimina y debes verificarlo manualmente si el proceso de git aún existe. Si el proceso no existe, entonces tiene que eliminar el archivo e intentar de nuevo git pull.

Cuestiones relacionadas