web-dev-qa-db-fra.com

Git fatal: la référence a un format invalide: 'refs / heads / master

J'utilise Dropbox pour synchroniser un référentiel git, mais maintenant quand j'essaye et Push j'obtiens une erreur:

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

Il semble donc que Dropbox ait détecté un conflit et créé une copie. Ok, pas de problème, j'ai donc supprimé le fichier en conflit. Pourtant, obtenir l'erreur git ci-dessus.

$ 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`

Comment puis-je réparer cela? Merci.

101
Justin

faites une sauvegarde de votre dépôt si vous n'êtes pas sûr de celui-ci, car ces commandes sont irréversibles.

d'abord, allez dans votre répertoire repo.

cd myrepo

puis recherchez récursivement les fichiers en conflit et supprimez-les

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

enfin, supprimez toutes les références "en conflit" du fichier pack-refs de git

awk '!/conflicted/' .git/packed-refs > temp && mv temp .git/packed-refs
178
Lane

Le fichier en conflit pourrait se trouver à plusieurs endroits, j'examinerais:

.git/logs/refs/remotes/Origin/
.git/logs/refs/heads/
.git/refs/remotes/Origin/
.git/refs/heads/

Ou vous pouvez regarder partout dans le .git sous-répertoire: find . -name '*conflicted*'

Ou, sinon, répertoriez les branches actives avec git branch -a et supprimer (git branch -d) quelque chose de suspect.

42
Marco Leogrande

Cela arrive également à notre équipe lorsque mon collègue pousse ses modifications et arrête le PC avant la mise à jour de Dropbox.

Je l'ai résolu si simplement.

Je viens de supprimer la copie en conflit. (Copie en conflit de XXXX aaaa-mm-jj)

Et tirez-le normalement.

Notez que mon collègue avait les changements avant foiré. Et il repousse ses changements. Cette fois, pas d'arrêt. :)

8
Hareen Laks

J'ai pu supprimer tous les fichiers en conflit de mon dossier .git, mais j'ai continué à obtenir des erreurs sur les fichiers qui n'existaient plus.

Le correctif pour moi était d'ouvrir .git/refs/packed_refs et en supprimant les lignes contenant le texte "en conflit".

7
Drew

Pour moi, cela donnait une erreur: fatal: Reference has invalid format: 'refs/tags/r0.2:3'

Vous pouvez aller dans le fichier /. Git/pack_refs et supprimer la ligne pour refs/tags/r0.2:3

Puis cela a commencé à fonctionner. Mais pourquoi c'est arrivé en premier lieu, je ne sais pas.

1
Rajesh Paul

J'obtenais la même erreur

fatal: la référence a un format non valide: 'refs/heads/somebranch (1)'

pour la commande suivante

git branch

Ensuite, j'ai recherché un nom erroné (nom de branche suivi de (1)) en utilisant la commande

find . -name 'somebranch (1)'

Et il a montré le résultat suivant

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

Quelle est une version dupliquée de somebranch IMO. Donc, j'ai supprimé cela en exécutant la commande find, puis en supprimant

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

Ensuite, la commande de branche s'exécute avec succès

git branch
0
zeeawan

Essayez un git checkout master le premier à monter sur la branche saine et bien nommée.

0
poke

J'ai rencontré l'erreur similaire telle que

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

La simple suppression du fichier .git/refs/heads/user-search-api (Sithu's conflicted copy 2016-01-08) dans le dépôt Dropbox distant a résolu le problème.

0
Sithu