Git fatal: la referencia tiene un formato no válido: 'refs / heads / master

101

Estoy usando Dropboxpara sincronizar un gitrepositorio, pero ahora cuando lo intento y pushaparece un error:

fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'

Entonces, parece que Dropbox detectó un conflicto y creó una copia. Ok, no hay problema, entonces eliminé el archivo en conflicto. Aún así, aparece el error de git anterior.

$ git checkout master
    M   index.html
    Already on 'master'
$ git add .
$ git commit -a -m "Cleanup repo"
    [master ff6f817] Cleanup repo
    1 file changed, 5 insertions(+), 5 deletions(-)
$ git push
    fatal: Reference has invalid format: 'refs/heads/master (MacBook-Pro's conflicted copy 2012-10-07)'
    The remote end hung up unexpectedly`

¿Cómo puedo arreglar esto? Gracias.

Justin
fuente

Respuestas:

178

haga una copia de seguridad de su repositorio si no está seguro de este, porque estos comandos son irreversibles.

primero, vaya a su directorio de repositorios.

cd myrepo

luego busque de forma recursiva los archivos en conflicto y elimínelos

find . -type f -name "* conflicted copy*" -exec rm -f {} \;

por último, elimine cualquier referencia "en conflicto" del archivo de refs empaquetado de git

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs
carril
fuente
1
Tuve el mismo problema y esto me lo solucionó. ¡Gracias!
erik
Esto me lo arregló también. ¡Gracias!
cecconeurale
1
para usuarios de macosfind . -type f -name "* conflicted copy*" -delete
Soyoes
42

El archivo en conflicto podría estar en varios lugares, buscaría:

.git/logs/refs/remotes/origin/
.git/logs/refs/heads/
.git/refs/remotes/origin/
.git/refs/heads/

O puede buscar en todas partes en el .git subdirectorio:find . -name '*conflicted*'

O, de lo contrario, enumere las ramas activas con git branch -ay elimine ( git branch -d) cualquier cosa sospechosa.

Marco Leogrande
fuente
Hay archivos en conflicto por todas partes dentro de .git. Los revisé y los borré todos, y está arreglado. Gracias.
Justin
2
@Justin Me alegro de haber podido ayudar. Si esta respuesta o cualquier otra resolvió su problema, márquela como aceptada.
Marco Leogrande
2
En Mac OS X use: find . -name '*conflicted*'(Editar: formato)
xgMz
1
@xgMz Gracias, actualizaré mi respuesta, ya que su solución tiene validez general.
Marco Leogrande
1
Con un simple find, conseguí un solo archivo conflictivo y solucioné manualmente el problema con dos mv. Hacer esto lentamente y razonando paso a paso es la ruta más segura.
pid
8

Esto también le sucede a nuestro equipo cuando mi colega empuja sus cambios y apaga la PC antes de que se actualice Dropbox.

Lo resolví de manera tan simple.

Acabo de eliminar la copia en conflicto. (Copia en conflicto de XXXX aaaa-mm-dd)

Y tire de él normalmente.

Tenga en cuenta que mi colega tuvo los cambios antes estropeados. Y volvió a impulsar sus cambios. Esta vez no hay apagado. :)

Hareen Laks
fuente
1
funcionó absolutamente perfecto para mí :) gracias - para mí Dropbox creó un nombre de archivo de cadena extraño que no era compatible con "actualizar"
cV2
1
¡Esto funcionó para mí! Había un archivo con "copia en conflicto" en el nombre en la carpeta / refs / heads y eliminándolo, luego tira / empuja y todo está bien. ¡Gracias!
DiscDev
7

Pude eliminar todos los archivos en conflicto de mi carpeta .git, pero seguí recibiendo errores sobre archivos que ya no existían.

La solución para mí fue abrir .git/refs/packed_refsy eliminar líneas que contenían el texto "en conflicto".

Dibujó
fuente
1

Para mi estaba dando error: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Puede ir a /.git/packed_refs archivo y eliminar la línea pararefs/tags/r0.2:3

Entonces empezó a funcionar. Pero por qué sucedió en primer lugar, no lo sé.

Rajesh Paul
fuente
0

Pruebe por git checkout masterprimera vez para entrar en la rama sana y bien nombrada.

dar un toque
fuente
Salida actualizada en la publicación original.
Justin
Hm, ¿podrías probar un completo git push origin mastery también pegar el resultado de git branch -apor favor?
empuje el
El mismo error aquí ... ¡intentarlo git branch -ada como resultado este mismo error!
trusktr
El problema está en el repositorio remoto, por lo que extraerlo o retirarlo no lo resuelve. Las otras respuestas anteriores se refieren a arreglar directamente los archivos en el control remoto y funcionan perfectamente. SU CONSEJO ES MUY BUENO pero no es una respuesta al problema.
pid
0

Estaba recibiendo el mismo error

fatal: la referencia tiene un formato no válido: 'refs / heads / somebranch (1)'

para el siguiente comando

git branch

Luego, busqué un nombre erróneo (nombre de rama seguido de (1)) usando el comando

find . -name 'somebranch (1)'

Y mostró el siguiente resultado

./.git/refs/heads/somebranch (1)

Que es una versión duplicada de alguna rama en mi opinión . Entonces, eliminé esto ejecutando el comando de búsqueda seguido de eliminar

find . -name 'somebranch (1)' -print -exec rm -rf {} \;

Entonces el comando de rama se ejecuta con éxito

git branch
Zeeawan
fuente
0

Encontré un error similar como

fatal: Reference has invalid format: 'refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)'

La simple eliminación del archivo .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08)en el repositorio remoto de Dropbox resolvió el problema.

Sithu
fuente