Comment supprimer la référence git `refs / original / refs / heads / master`?

35

Qu'est-ce que c'est dans la boîte ronde jaune?

capture d'écran

J'ai essayé git branch -D, git tag -dmais aucun n'a réussi. Alors comment le supprimer?

Xiè Jìléi
la source
1
Veuillez envisager de remplacer la réponse acceptée par la réponse d' Alexey Ten, qui est très appréciée et correcte ( git update-ref -d).
Jonathon Reinhart

Réponses:

11

Il ressemble à une balise, donc la commande suivante devrait fonctionner:

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

Mais comme vous ne l'avez pas dit, vous pouvez simplement supprimer le fichier du .gitrépertoire. Depuis la racine du référentiel, une commande comme celle-ci l'obtiendra:

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

Le chemin peut être légèrement différent en cas d' git-tagéchec de la commande, vous pouvez donc vouloir cd .git/refsrechercher la tête incriminée par essais et erreurs. La suppression du fichier supprimera la référence de votre référentiel local.

Stephen Jennings
la source
2
Ce n'est pas un tag, cependant, je l'ai trouvé comme .git/refs/original/refs/heads/master.
Xiè Jìléi
1
Utilisez git update-refplutôt que de muter manuellement les internes de Git. Voir la réponse d'Alexey.
wchargin
100

Cette commande devrait fonctionner

git update-ref -d refs/original/refs/heads/master
Alexey Ten
la source
Cela a fonctionné pour moi avec le même problème. Notez que la référence a été stockée dans un fichier appelé .git / packed-refs. Si vous l'ouvrez, vous pouvez voir la ligne avec le SHA et la chaîne "refs / original / refs / heads / master". Vous pourriez probablement supprimer cette ligne, mais j'utiliserais cette commande pour être sûr.
Matt N
14
+1: Vous devez toujours utiliser git update-ref -dau lieu de simplement rmfaire référence - de mauvaises choses peuvent se produire autrement.
Callum Rogers du
3
Cela devrait être la réponse acceptée
Daniel Alder
1
@CallumRogers pourquoi?
wahnfrieden
6
@wahnfrieden car git pourrait utiliser des refs compressés et il n'y aura pas de fichier correspondant dans le refsrépertoire
Alexey Ten
17

Ceci est une réf. Normalement créé par git filter-branch- c'est un pointeur vers l'endroit où se trouvait votre branche avant de s'exécuter git filter-branch.

Et pour supprimer toute référence, vous ne pouvez toujours rien y pousser dans le référentiel local:

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

Les autres réponses couvraient également assez bien d'autres façons de supprimer.

chutz
la source
1
"Ne rien pousser" pour supprimer la référence localement est très intelligent.
40XUserNotFound
J'ai fait ma journée. J'avais une référence à une balise distante que la télécommande n'existait plus. C'est la seule commande qui a fonctionné.
RW4