origin - git pull remote branch
git pull falla "no se puede resolver la referencia" "no se puede actualizar la referencia local" (25)
Usando git 1.6.4.2, cuando hago un git pull
recibo este error:
error: unable to resolve reference refs/remotes/origin/LT558-optimize-sql: No such file or directory
From git+ssh://remoteserver/~/misk5
! [new branch] LT558-optimize-sql -> origin/LT558-optimize-sql (unable to update local ref)
error: unable to resolve reference refs/remotes/origin/split-css: No such file or directory
! [new branch] split-css -> origin/split-css (unable to update local ref)
He intentado remote prune origin
git, pero no sirvió de nada.
Anotar un caso específico que pueda causar este problema.
Un día presioné una rama llamada "feature / subfeature", mientras tenía la rama "feature" en el control remoto.
Esa operación funcionó bien sin ningún error de mi parte, pero cuando mis compañeros buscaron y / o extrajeron cualquier rama, todos tenían exactamente el mismo mensaje de error al unable to update local ref
, cannot lock ref ''refs/remotes/origin/feature/subfeature
.
Esto se resolvió eliminando la rama de la feature
en el control remoto ( git push --delete origin feature
) y luego ejecutando git remote prune origin
en el repositorio de mis compañeros de trabajo, lo que generó mensajes que incluyen el * [pruned] origin/feature
.
Por lo tanto, supongo que git fetch
estaba tratando de crear la referencia de subfeature
en la carpeta de feature
en git internamente (.git / ...), pero la creación de la carpeta falló porque ya había feature
referencia a la feature
.
Ejecuta los siguientes comandos:
rm .git/refs/remotes/origin/master
git fetch
git branch --set-upstream-to=origin/master
Por si acaso, si necesita saber qué es
.git/refs/remotes/origin/master
, debería leer la sección Remotes en Referencias de Git .
En mi caso, el problema se resolvió después de haber eliminado todos los archivos de referencia de eliminación en el directorio .git
.
Si observa el mensaje, le dirá qué archivos necesita eliminar (específicamente).
Los archivos a eliminar se encuentran bajo .git/refs/remotes
.
Acabo de eliminar todos los archivos y ejecuté gc prune
git gc --prune=now
Después de eso, todo funciona bien.
Enfrentó el mismo problema cuando se eliminó el repositorio y se creó con el mismo nombre. Funcionó solo cuando restablecí la URL remota como se muestra a continuación;
git remoto set-url origin [GIT_REPO_URL]
Verifique la url remota:
git remote -v
Ahora, todos los comandos deberían funcionar como de costumbre.
Estaba recibiendo este error una vez ejecutando git fetch:
error: no se puede bloquear ref ''refs / remotes / origin / branchname'': ref refs / remotes / origin / featureEmailTemplate está en 45c5f2ab ... pero se esperaba d48af9 ... desde Home ... (no se puede actualizar ref local)
El siguiente comando solucionó el problema:
git gc --prun = ahora
Esto hizo el trabajo por mí:
git gc --prune=now
Intenta limpiar tu repositorio local con:
$ git gc --prune=now
$ git remote prune origin
man git-gc (1):
git-gc - Cleanup unnecessary files and optimize the local repository
git gc [--aggressive] [--auto] [--quiet] [--prune=<date> | --no-prune]
Runs a number of housekeeping tasks within the current repository, such as compressing file revisions
(to reduce disk space and increase performance) and removing unreachable objects which may have been
created from prior invocations of git add.
Users are encouraged to run this task on a regular basis within each repository to maintain good disk
space utilization and good operating performance.
man git-remote (1):
git-remote - manage set of tracked repositories
git remote prune [-n | --dry-run] <name>
Deletes all stale remote-tracking branches under <name>. These stale branches have already been
removed from the remote repository referenced by <name>, but are still locally available in
"remotes/<name>".
Me pasó a mí también. En mi caso, el árbitro malo fue maestro, e hice lo siguiente:
rm .git/refs/remotes/origin/master
git fetch
Esto hizo que git restaurara el archivo ref. Después de eso todo volvió a funcionar como se esperaba.
Para mí, funcionó para eliminar los archivos que están arrojando errores de la carpeta .git/refs/remotes/origin/
.
Para mí, tenía una rama local llamada feature/phase2
y la rama remota se llamaba feature/phase2/data-model
. El conflicto de nombres fue la causa del problema, por lo que eliminé mi sucursal local (podría cambiarle el nombre si tuviera algo que mantener)
Para responder a esto de manera muy breve, este problema surge cuando su local tiene cierta información sobre el control remoto y alguien cambia algo que hace que el control remoto y sus cambios no sean sincronizados.
Estaba teniendo este problema porque alguien ha eliminado una rama remota y ha creado otra vez con el mismo nombre.
Para hacer frente a estos problemas, realice una extracción o recuperación desde el control remoto.
git remote prune origin
o si está utilizando alguna GUI, realice una búsqueda desde el control remoto.
Prueba esto:
git pull origin Branch_Name
Branch_Name
, la rama en la que estás actualmente.
Si solo haces un git pull
, también extrae el resto del nombre de la rama creada.
Así que es la razón por la que está recibiendo esto:
! [new branch] split-css -> origin/split-css (unable to update local ref)
Pude trabajar con
git remote update --prune
Se produjo este problema al intentar clonar desde un archivo creado en git bundle
, ninguna de las otras respuestas funcionó porque no pude clonar el repositorio (por lo que git gc
y eliminar / editar archivos estaban fuera de la cuestión).
Sin embargo, había otra forma de solucionarlo: el archivo de origen de un archivo .bundle
con:
# v2 git bundle
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d HEAD
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
9a3184e2f983ba13cc7f40a820df8dd8cf20b54d refs/heads/master
PACK.......p..x...Kj.0...: (and so on...)
Simplemente eliminando la cuarta línea con vim se solucionó el problema.
Si git gc --prune=now
no te ayuda. (mala suerte como yo)
Lo que hice fue eliminar el proyecto en local y volver a clonar todo el proyecto nuevamente.
Solo encontré el problema hoy.
Método de solución de problemas: con SourceTree en los servidores de Windows, puede intentar ejecutarlo como administrador. Eso soluciona mi problema de "no se puede actualizar la referencia local" en Atlassian Source Tree 2.1.2.5 en un Windows Server 2012 R2 en el dominio.
Si también puede replicar esta situación, se demuestra que el problema está causado por un problema de permiso. Es mejor profundizar y encontrar la causa raíz, probablemente algunos archivos en particular son propiedad de otros usuarios y, de lo contrario, hay un efecto secundario no deseado: tendrá que ejecutar SourceTree como Administrador por el resto de la eternidad.
Solo me gustaría añadir cómo puede suceder que se rompa una referencia.
Posible causa raíz
En mi sistema (Windows 7 de 64 bits), cuando ocurre un BSOD , algunos de los archivos de referencia almacenados (lo más probable es que estén abiertos / escritos actualmente cuando ocurrió BSOD) se sobrescriben con caracteres NULL
(ASCII 0).
Como han mencionado otros, para solucionarlo, es suficiente simplemente eliminar esos archivos de referencia no válidos y volver a buscar o volver a extraer el repositorio.
Ejemplo
Error: cannot lock ref ''refs/remotes/origin/some/branch'': unable to resolve reference ''refs/remotes/origin/some/branch'': reference broken
Solución: elimine el archivo %repo_root%/.git/refs/remotes/origin/some/branch
Tenía el mismo msg pero con un directorio, obtuvo un msg fallido al tirar.
git --prone tampoco me ayudó. Resulta que había un archivo con el mismo nombre que un directorio creado de forma remota.
Tuvo que ir a .git / logs / refs / remotes / origin y borrar el archivo de configuración regional; luego, tire de nuevo, todo está bien.
Tuve el mismo problema con la actualización del compositor. Pero para mí, solo funcionó después de borrar la memoria caché del compositor y después de eliminar el contenido de la carpeta del proveedor:
rm -rf vendor/*
git gc --prune=now
git pull
composer clear-cache
composer update my/package
Tuve el mismo problema. sigo los siguientes pasos
1) cambiar su rama que tiene problema a otra rama
2) eliminar esa rama
3) pago de nuevo.
Nota: - Puede guardar los cambios no confirmados y volver a colocarlos.
Tuve este mismo problema y lo resolví yendo al archivo en el que estaba cometiendo el error:
/repo/.git/refs/remotes/origin/master
Este archivo estaba lleno de nulos, lo reemplacé con la última referencia de github.
Tuve este problema al utilizar SourceTree. Intenté tirar de nuevo y funcionó. Creo que estaba hechizando ramas (checkout) demasiado rápido :).
Mi situación es un poco diferente a la del póster porque mi repositorio ha sido relativamente cooperativo, sin ninguna corrupción aparente.
git fetch --prune
corrigió este error para mí:
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:25]
[I]> git fetch
error: cannot lock ref ''refs/remotes/origin/user/janek/integration/20170505'': ''refs/remotes/origin/user/janek/integration'' exists; cannot create ''refs/remotes/origin/user/janek/integration/20170505''
From github.com:zooxco/driving
! [new branch] user/janek/integration/20170505 -> origin/user/janek/integration/20170505 (unable to update local ref)
From github.com:zooxco/driving
[marc.zych@marc-desktop] - [~/code/driving] - [Wed May 10, 02:58:30]
[I]> git fetch --prune
- [deleted] (none) -> origin/user/janek/integration
Sin embargo, esto supone que la rama ofensiva se eliminó en el control remoto.
git prune origin
y eso hizo el trabajo.
# remove the reference file of the branch "lost"
rm -fv ./.git/refs/remotes/origin/feature/v1.6.9-api-token-bot-reader
# get all the branches from the master
git fetch --all
# git will "know" how-to handle the issue from now on
# From github.com:futurice/senzoit-www-server
# * [new branch] feature/v1.6.9-api-token-bot-reader ->
# origin/feature/v1.6.9-api-token-bot-reader
# and push your local changes
git push