web-dev-qa-db-fra.com

Sourcetree/GIT - Impossible de verrouiller la référence/référence cassée en tirant

Un collègue et moi travaillons dans la même branche depuis une semaine, poussant et tirant constamment les changements et tout d'un coup, aujourd'hui, j'appuie sur «tirer» pour voir s'il y avait des changements que je devais faire et j'ai une erreur .

C’est d’ailleurs une source d’argent. L'erreur était la suivante:

git -c diff.mnemonicprefix=false -c core.quotepath=false fetch Origin
error: cannot lock ref 'refs/remotes/Origin/angular_removal': unable to resolve reference 'refs/remotes/Origin/angular_removal': reference broken
From https://bitbucket.org/colossus
 ! [new branch]        angular_removal -> Origin/angular_removal  (unable to update local ref)

Je suis dans sourcetree, qui a un terminal intégré, mais je n'arrive pas à trouver de résolution ici.

9
Tom N.

Le texte d'erreur était légèrement différent pour moi comme: unable to update local ref it is [hash_code_1] but expected [hash_code_2].

Donc, la commande comme rm -rf .git/refs/remotes/Origin/angular_removal m'a aidé à ne chercher qu'une fois. Ensuite, le message reviendrait à nouveau.

Ce qui a réellement aidé dans cette situation à résoudre le problème de façon permanente, c'est:

  1. allez dans le sous-dossier .git de mon dépôt local;
  2. ouvrir le fichier "emballé-ref";
  3. trouvez la ligne avec le nom de la branche à partir du message d'erreur;
  4. supprimez-le de ce fichier;
  5. maintenant, vous pouvez aller chercher ou tirer tout ce que vous voulez.
10
Dudar

La solution acceptée ne fournit que des détails sur la manière dont OP a résolu le problème et ce n’est pas une réponse définitive. 

Pour les personnes comme moi qui se retrouvent ici de Google, voici la solution qui fonctionne réellement.

Disons, si l'erreur dit,

error: cannot lock ref 'refs/remotes/Origin/angular_removal': unable to resolve reference 'refs/remotes/Origin/angular_removal': reference broken

Ici, l'élément incriminé est un fichier corrompu nommé refs/remotes/Origin/angular_removal qui réside dans le dossier caché .git.

Afin de résoudre ce problème, exécutez les commandes suivantes dans le répertoire racine de votre référentiel.

rm .git/refs/remotes/Origin/angular_removal
git fsck

La première commande seule devrait résoudre le problème, car git tente de réinitialiser les références manquantes. 

La commande git fsck est juste là pour vérifier si le référentiel est en bon état.


NOTE: Le fichier ref serait différent des autres. Alors assurez-vous vous utilisez le nom de fichier ref du message d'erreur que vous avez reçu. **

13
Raja Anbazhagan

Vient de m'est arrivé aussi; une de mes branches sous mon pseudonyme était corrompue. Réparer:

rm <root of repository>.git/refs/remotes/Origin/<your alias>
git fetch

Vous pouvez utiliser rd /s au lieu de rm sous Windows.

Voici les étapes détaillées que j'ai prises pour résoudre le problème. Vous pouvez choisir de passer certaines des étapes ci-dessous:

  1. J'ai d'abord engagé tous mes changements locaux dans la branche locale qui me donnait le problème.
  2. Créé patches git pour ma branche locale.
  3. Supprimé ma branche locale.
  4. Appliqué le correctif suivant
  5. Extrait de la branche distante après avoir exécuté git fetch
  6. Appliqué les fichiers de correctif nécessaires à la branche locale.

Cela a permis à git de restaurer le fichier ref. Après cela, tout a fonctionné comme prévu à nouveau.

1
user3613932

Plusieurs solutions ne l'ont pas tout à fait résolu mais j'ai fini par cloner à nouveau

1
Tom N.

Voici les étapes qui l'ont corrigé pour moi:

  1. Supprimer le fichier .git/packed_refs
  2. Faites un pull.
  3. Exécutez git pack-refs pour recréer le fichier packages_refs.

Pour référence, voir: https://git-scm.com/docs/git-pack-refs

0
Lucas Castro