¿Cómo eliminar la referencia git `refs / original / refs / heads / master`?

35

¿Qué es esto en la caja redonda amarilla?

captura de pantalla

Lo intenté git branch -D, git tag -dpero ninguno tuvo éxito. Entonces, ¿cómo eliminarlo?

Xiè Jìléi
fuente
1
Considere cambiar la respuesta aceptada a la respuesta de Alexey Ten, que es altamente votada y correcta ( git update-ref -d).
Jonathon Reinhart el

Respuestas:

11

Parece una etiqueta, por lo que el siguiente comando debería funcionar:

git tag -d refs/original/refs/heads/master

Pero, como ha dicho que no, puede eliminar el archivo del .gitdirectorio. Desde la raíz del repositorio, un comando como este lo obtendrá:

rm .git/refs/tags/refs/original/refs/heads/master

La ruta puede ser ligeramente diferente si el git-tagcomando falla, por lo que es posible que desee cd .git/refsencontrar la cabeza infractora por prueba y error. Eliminar el archivo eliminará la referencia de su repositorio local.

Stephen Jennings
fuente
2
No es una etiqueta, sin embargo, la he encontrado como .git/refs/original/refs/heads/master.
Xiè Jìléi
1
Use en git update-reflugar de mutar manualmente las partes internas de Git. Ver la respuesta de Alexey.
wchargin
100

Este comando debería funcionar

git update-ref -d refs/original/refs/heads/master
Alexey Ten
fuente
Esto funcionó para mí con el mismo problema. Tenga en cuenta que la referencia se almacenó en un archivo llamado .git / package-refs. Si abre eso, puede ver la línea con el SHA y la cadena "refs / original / refs / heads / master". Probablemente podría eliminar esa línea, pero usaría este comando para estar seguro.
Matt N
14
+1: siempre debes usar en git update-ref -dlugar de solo rmref: las cosas malas pueden suceder de otra manera.
Callum Rogers
3
Esta debería ser la respuesta aceptada
Daniel Alder
1
@CallumRogers ¿por qué?
wahnfrieden
66
@wahnfrieden porque git podría usar referencias empaquetadas y no habrá un archivo correspondiente en el refsdirectorio
Alexey Ten
17

Esta es una referencia. Normalmente creado por git filter-branch: es un puntero al lugar donde estaba su rama antes de ejecutarla git filter-branch.

Y para eliminar cualquier referencia, siempre puede insertar nada en el repositorio local:

git push . :refs/original/refs/heads/master

Las otras respuestas también cubrieron bastante bien otras formas de eliminación.

chutz
fuente
1
"No presionar nada" para eliminar la referencia localmente es muy inteligente.
40XUserNotFound
Me alegró el día. Tenía una referencia a una etiqueta remota que el control remoto ya no existía. Este es el único comando que funcionó.
RW4