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é

usuario115561
fuente
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

Barrilete
fuente
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

Edward Yang
fuente
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.

T. Moez
fuente
13

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

rm .git/logs/refs/remotes/origin/master 
Babak
fuente
¿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
fuera de los límites
fuente
10

rm .git/refs/remotes/origin/master

¡Me funciona!

Xin
fuente
8

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

tpg2114
fuente
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

Clona el repositorio nuevamente y copia la carpeta .git en tu proyecto roto.

Gabriel Santos Carvalho
fuente
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.

Gabriel
fuente
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.

Hazok
fuente
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.

GONeale
fuente
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.

daguy
fuente
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

thealprashant
fuente
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.

fibonacci
fuente
0

Esto funciona para mi

rm .git/logs/refs/remotes/origin/master 
Saurabh Kumar
fuente
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.

Peter Lenahan
fuente
0

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

Nitin Agarwal
fuente
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