Error de Git en git pull (no se puede actualizar la referencia local)


115

Solo tengo el maestro de rama y obtengo este error cada vez que intento "git pull":

error: Couldn't set refs/remotes/origin/master
From /var/lib/git/xxx/project
 ! a0f80ea..49177a3  master     -> origin/master  (unable to update local ref)

y cuando hago "git pull origin master" obtengo:

error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

he estado buscando pero no puedo encontrar por qué


2
¿Dónde está el repositorio local? ¿Lo creó como un usuario diferente al que está usando para ejecutar la extracción? Parece un problema de permisos de archivos.
tpg2114

Sí, está justo después de decir que el propietario de los archivos del proyecto era otro usuario, ahora mi pregunta parece tan tonta, pero me dio la respuesta, por favor,
hágala

por favor @ tpg2114 agregue esto como una respuesta para
elegirlo

Respuestas:


262

Mi equipo y yo encontramos este error, no pudimos actualizar la referencia local , al hacer una extracción en SourceTree.

Nosotros usamos :

git gc --prune=now

Esto elimina cualquier objeto de referencia duplicado que debería solucionar el problema.

Aquí hay algunos enlaces donde puede obtener más información sobre las referencias y la poda de git :

git consejo de la semana

documentación de git-prune

referencias de git


1
También funcionó para mí, mismo mensaje, Sourcetree en Windows 7
James Westgate

2
acaba de empezar a tener este problema también. ¡Gracias un montón! funcionó perfectamente!
ddrossi93

3
Puede necesitar estos dos comandos: git gc --prune=now git remote prune originde stackoverflow.com/questions/2998832/…
bryan

1
Lo intenté git remote prune originy no funcionó para mí. Pero después de eso, probé esto git gc --prune=now, ¡y funcionó! No estoy seguro, si ambos eran necesarios en ese orden, o solo este.
Anurag

1
Otro problema críptico gitque lleva a una publicación útil de StackOverflow con una solución concisa.
ijoseph

126

Resolví lo siguiente:

git remote prune origin


6
¡Eureka! De hecho funcionó. Tiene algo que ver con ramas remotas renombradas o algo así. No voy a intentar explicarlo.
TheSoftwareJedi

8
Esto lo hizo por mí, git gc --prune=nowno hizo nada
Josh G

3
mismo. esto funciona para mi. git gc --prune = ahora no funcionó para mí.
Tony

16

con el comando de línea gitbach, use git update-refpara actualizar la referencia de su sucursal local:

$ git update-ref -d refs/remotes/origin/[locked branch name]

luego tira usando $ git pull

[locked branch name] es el nombre de la rama en la que se produce el error debido a la falta de coincidencia de los ID de confirmación.


13

Intente usar este comando en la carpeta raíz de su repositorio git:

rm .git/logs/refs/remotes/origin/master 

¿Dónde está esta carpeta en Windows?
Kolob Canyon

Lo encontré. Es el directorio en el que haya clonado
Kolob Canyon

12

Descubrí el mismo mensaje de error al intentar extraer de un Bitbuck Repo a mi copia local. También hay solo un maestro de rama y el comando git pull origin masterconduce a este mensaje de error

From https://bitbucket.org/xxx
 * branch            master     -> FETCH_HEAD
error: Couldn't set ORIG_HEAD
fatal: Cannot update the ref 'ORIG_HEAD'.

Solución de la siguiente manera

  1. git reflog encuentra el número de la última confirmación
  2. git reset --hard <numnber> restablecer a la última confirmación
  3. git pull origin master tirar de nuevo sin error

10

rm .git/refs/remotes/origin/master

¡Me funciona!


8

Asegúrese de que el usuario que está ejecutando git pullsea ​​el mismo que creó el repositorio. Los permisos de archivo son incorrectos.


Para mí, tuve que cambiar el propietario de los archivos en el repositorio que estaba tratando de ingresar al usuario correcto con chown. Creo que esto es básicamente lo que estaba diciendo, aunque no fue obvio para mí cuando leí esto.
Dee

Estoy de acuerdo con esto, verifique que el propietario y el grupo estén configurados para que el usuario desee ingresar el repositorio ".git" (sucede si extrajo una rama que es "raíz") y un "sudo chown -R" hizo el trabajo en mi caso.
jo_


2

Esto me sucedió en OSX, donde uso un sistema de archivos que no distingue entre mayúsculas y minúsculas. De alguna manera, otro desarrollador empujó una rama con el mismo nombre pero diferente caso: My-Branchvs my-branch.

Ya había My-Branchverificado y obtuve el error "no se puede actualizar la referencia local" cuando hice una extracción, probablemente porque el sistema de archivos piensa My-Branch== my-branch.

Como usamos Github, pude resolver el problema eliminando una de las ramas a través de la GUI de Github.


En mi caso, ambas ramas en conflicto pertenecían a otro usuario, por lo que no pude eliminar una. En cambio, eliminé el archivo de referencia de la rama en .git \ refs \ remotes, y eso lo solucionó (temporalmente: el problema volverá cada vez que extraiga hasta que el otro usuario elimine una de sus ramas).
Jana Mandic

Mi problema también se debió a que la sucursal local y la remota tenían mayúsculas diferentes. Eliminar la rama local, usar el comando prune anterior y luego verificar desde el origen lo resolvió
descripción del

1

Este error con (no se puede actualizar la referencia local) también puede ocurrir si ha cambiado las contraseñas recientemente y hay algunas cosas elegantes que integran sus inicios de sesión de Windows y Linux.


1

Hablando desde un usuario de PC: reiniciar.

Honestamente, funcionó para mí. He resuelto dos problemas extraños de git que pensé que eran corrupciones de esta manera.


1

Esta es probablemente una situación muy específica, pero: ejecuto Windows en una máquina virtual Parallels en mi MacBook Pro, con mis repositorios locales almacenados en el disco de la máquina virtual, que se comparte con macOS.

Si tengo un archivo abierto en una aplicación de Mac desde un repositorio que se encuentra en la máquina virtual de Windows, a veces aparece el error "No se puede actualizar la referencia local". La solución cuando esto sucede es simplemente cerrar el archivo o salir de la aplicación Mac.


1

¿Qué pasó aquí? Las referencias locales a sus ramas remotas se cambiaron y, por lo tanto, cuando ejecuta git pull, git no encuentra ninguna rama remota correspondiente y, por lo tanto, falla.

git remote prune origin

en realidad limpia estas referencias locales y luego se ejecuta de git pullnuevo.

Sugerencia: ejecute con la --dry-runopción de seguridad


0

Tuve el mismo problema en mi servidor Debian ya que el disco está lleno. No se pudo crear ningún archivo temporal porque no queda espacio en el dispositivo. Después de limpiar algunos archivos, funcionó bien.


0

Esto funciona para mi

rm .git/logs/refs/remotes/origin/master 

Dudo que esto ayude, o incluso que funcione en absoluto. Para convencerme de lo contrario, agregue una explicación de cómo debería funcionar y por qué se supone que ayuda con el problema. Resaltar las diferencias con otra respuesta existente aparentemente similar sería una ventaja. Especialmente el votado a favor de Babak.
Yunnosch

0

Tuve el mismo error, estaba actualizando desde Eclipse y obtuve muchos errores. Así que intenté actualizar desde una ventana de comandos de DOS y obtuve el mismo problema.

Luego probé la solución "git gc --prune = now". Esto dio mensajes de que los archivos estaban bloqueados en el directorio refs.

Eclipse debe haber tenido bloqueado algo en el directorio "refs".
La solución que encontré fue simplemente cerrar Eclipse. Luego actualicé el repositorio de DOS con un comando "git PULL", y todo funcionó bien.


0

Eliminar archivo .git / logs / refs / remotes / origin / [Nombre de rama bloqueada]


1
Dudo que esto ayude, o incluso que funcione en absoluto. Para convencerme de lo contrario, agregue una explicación de cómo debería funcionar y por qué se supone que ayuda con el problema. Resaltar las diferencias con otra respuesta existente aparentemente similar sería una ventaja. Especialmente el votado a favor de Babak.
Yunnosch
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.