J'ai eu un problème similaire. Mon ordinateur portable s'est éteint pendant une opération Git. Bouh.
Je n'avais pas de sauvegardes. (N.B. Ubuntu One n'est pas une solution de sauvegarde pour Git ; cela écrasera votre référentiel sain avec celui corrompu.)
Aux magiciens de Git, si c'était une mauvaise façon de le réparer, veuillez laisser un commentaire. Cela a cependant fonctionné pour moi... au moins temporairement.
Étape 1 : Faites une sauvegarde du dossier .git (en fait, je le fais entre chaque étape qui modifie quelque chose, mais avec un nouveau nom de copie, par exemple, .git-old-1, .git-old-2, etc.) :
cd ~/workspace/mcmc-chapter
cp -a .git .git-old
Étape 2 : Exécutez git fsck --full
git fsck --full
erreur : le fichier objet .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e est vide
fatal : l'objet non connecté 8b61d0135d3195966b443f6c73fb68466264c68e (stocké dans .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e) est corrompu
Étape 3 : Supprimez le fichier vide. Je me suis dit pourquoi pas ; de toute façon, il est vide.
rm .git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e
rm: supprimer le fichier vide régulier protégé en écriture `.git/objects/8b/61d0135d3195966b443f6c73fb68466264c68e' ? o
Étape 3 : Exécutez à nouveau git fsck
. Continuez à supprimer les fichiers vides. Vous pouvez également cd
dans le répertoire .git
et exécuter find . -type f -empty -delete -print
pour supprimer tous les fichiers vides. À un moment donné, Git a commencé à me dire qu'il faisait réellement quelque chose avec les répertoires d'objets:
git fsck --full
Vérification des répertoires d'objet : 100% (256/256), terminé.
erreur : le fichier objet .git/objects/e0/cbccee33aea970f4887194047141f79a363636 est vide
fatal : l'objet non connecté e0cbccee33aea970f4887194047141f79a363636 (stocké dans .git/objects/e0/cbccee33aea970f4887194047141f79a363636) est corrompu
Étape 4 : Après avoir supprimé tous les fichiers vides, j'en suis finalement arrivé à ce que git fsck
fonctionne réellement :
git fsck --full
Vérification des répertoires d'objet : 100% (256/256), terminé.
erreur : HEAD : pointeur sha1 invalide af9fc0c5939eee40f6be2ed66381d74ec2be895f
erreur : refs/heads/master ne pointe pas vers un objet valide !
erreur : refs/heads/master.u1conflict ne pointe pas vers un objet valide !
erreur : 0e31469d372551bb2f51a186fa32795e39f94d5c : pointeur sha1 invalide dans l'arborescence de cache
blob pendants 03511c9868b5dbac4ef1343956776ac508c7c2a2
blob manquant 8b61d0135d3195966b443f6c73fb68466264c68e
blob manquant e89896b1282fbae6cf046bf21b62dd275aaa32f4
blob pendants dd09f7f1f033632b7ef90876d6802f5b5fede79a
blob manquant caab8e3d18f2b8c8947f79af7885cdeeeae192fd
blob manquant e4cf65ddf80338d50ecd4abcf1caf1de3127c229
Étape 5 : Essayez git reflog
. Échec car mon HEAD est corrompu.
git reflog
fatal : mauvais objet HEAD
Étape 6 : Recherche sur Google. Trouvez ceci. Obtenez manuellement les deux dernières lignes du reflog :
tail -n 2 .git/logs/refs/heads/master
f2d4c4868ec7719317a8fce9dc18c4f2e00ede04 9f0abf890b113a287e10d56b66dbab66adc1662d Nathan VanHoudnos 1347306977 -0400 commit: up to p. 24, including correcting spelling of my name
9f0abf890b113a287e10d56b66dbab66adc1662d af9fc0c5939eee40f6be2ed66381d74ec2be895f Nathan VanHoudnos 1347358589 -0400 commit: fixed up to page 28
Étape 7 : Notez qu'à partir de l'étape 6, nous avons appris que la HEAD pointe actuellement vers le tout dernier commit. Alors essayons simplement de regarder le commit parent :
git show 9f0abf890b113a287e10d56b66dbab66adc1662d
commit 9f0abf890b113a287e10d56b66dbab66adc1662d
Author: Nathan VanHoudnos
Date: Mon Sep 10 15:56:17 2012 -0400
up to p. 24, including correcting spelling of my name
diff --git a/tex/MCMC-in-IRT.tex b/tex/MCMC-in-IRT.tex
index 86e67a1..b860686 100644
--- a/tex/MCMC-in-IRT.tex
+++ b/tex/MCMC-in-IRT.tex
Cela a fonctionné !
Étape 8 : Maintenant, nous devons pointer HEAD vers 9f0abf890b113a287e10d56b66dbab66adc1662d.
git update-ref HEAD 9f0abf890b113a287e10d56b66dbab66adc1662d
Qui n'a pas râlé.
Étape 9 : Voyons ce que fsck dit :
git fsck --full
Vérification des répertoires d'objet : 100% (256/256), terminé.
erreur : refs/heads/master.u1conflict ne pointe pas vers un objet valide !
erreur : 0e31469d372551bb2f51a186fa32795e39f94d5c : pointeur sha1 invalide dans l'arborescence de cache
blob pendants 03511c9868b5dbac4ef1343956776ac508c7c2a2
blob manquant 8b61d0135d3195966b443f6c73fb68466264c68e
blob manquant e89896b1282fbae6cf046bf21b62dd275aaa32f4
blob pendants dd09f7f1f033632b7ef90876d6802f5b5fede79a
blob manquant caab8e3d18f2b8c8947f79af7885cdeeeae192fd
blob manquant e4cf65ddf80338d50ecd4abcf1caf1de3127c229
Étape 10 : Le pointeur sha1 invalide dans l'arborescence de cache semblait provenir d'un fichier d'index (maintenant obsolète) (source). Donc je l'ai supprimé et j'ai réinitialisé le dépôt.
rm .git/index
git reset
Changements non mis en scène après la réinitialisation :
M tex/MCMC-in-IRT.tex
M tex/recipe-example/build-example-plots.R
M tex/recipe-example/build-failure-plots.R
Étape 11 : En regardant à nouveau fsck...
git fsck --full
Vérification des répertoires d'objet : 100% (256/256), terminé.
erreur : refs/heads/master.u1conflict ne pointe pas vers un objet valide !
blob pendants 03511c9868b5dbac4ef1343956776ac508c7c2a2
blob pendants dd09f7f1f033632b7ef90876d6802f5b5fede79a
Les blobs pendants ne sont pas des erreurs. Je ne suis pas préoccupé par master.u1conflict, et maintenant que ça fonctionne, je ne veux plus y toucher !
Étape 12 : Rattraper mes modifications locales :
git status
# Sur la branche master
# Modifications non validées pour le commit :
# (utilisez "git add ..." pour mettre à jour ce qui sera validé)
# (utilisez "git checkout -- ..." pour annuler les modifications dans le répertoire de travail)
#
# modifié : tex/MCMC-in-IRT.tex
# modifié : tex/recipe-example/build-example-plots.R
# modifié : tex/recipe-example/build-failure-plots.R
#
< ... snip ... >
aucune modification ajoutée au commit (utilisez "git add" et/ou "git commit -a")
git commit -a -m "récupération du fiasco git"
[master 7922876] récupération du fiasco git
3 fichiers modifiés, 12 insertions(+), 94 suppressions(-)
git add tex/sept2012_code/example-code-testing.R
git commit -a -m "ajout du code d'exemple"
[master 385c023] ajout du code d'exemple
1 fichier modifié, 331 insertions(+)
création du mode 100644 tex/sept2012_code/example-code-testing.R
0 votes
Avez-vous tué de force une opération
git add
? Votre disque dur est-il plein ?0 votes
Non, mon disque dur n'est pas plein, je ne me souviens pas avoir arrêté de force une opération git add, et si je l'ai fait ? Comment puis-je résoudre cela ?
0 votes
Non, l'erreur est toujours là ...
2 votes
Si ce dépôt existe sur un dépôt distant, vous pouvez essayer de copier ce fichier de là vers le vôtre en local s'il existe sur votre dépôt distant.
2 votes
J'ai reçu cette erreur lorsque mes autorisations dans le répertoire .git ont été gâchées d'une manière ou d'une autre et je n'avais pas accès en lecture. Donc cela peut se produire dans des cas où les fichiers ne sont pas vides mais qu'ils ne peuvent tout simplement pas être écrits. Corriger les autorisations et exécuter
git fsck
s'en est occupé.0 votes
Possible duplicate of [Comment puis-je traiter les fichiers d'objet git corrompus?](http://stackoverflow.com/questions/4111728/Comment puis-je traiter les fichiers d'objet git corrompus?)
0 votes
Cela peut se produire si votre réseau est interrompu lors d'un commit. Suivez les étapes de la réponse acceptée pour résoudre le problème
0 votes
J'ai essayé les réponses populaires ci-dessous en vain et simplement supprimer mon git et copier le git distant a résolu le problème pour moi. J'ai trouvé la réponse ici
1 votes
Une solution simple consiste à : j'ai cloné le dépôt à un endroit différent et j'ai remplacé l'ancien .git par le nouveau fichier .git cloné.
0 votes
Dans mon cas, je recevais ces erreurs en poussant vers le dépôt distant, et j'ai d'une manière ou d'une autre basculé vers la branche principale et je ne peux maintenant pas passer à la branche corrompue. J'ai pensé à essayer les solutions mentionnées ici mais je ne peux même plus voir mes anciens changements localement. Toute résolution à cela?
0 votes
Je continue à obtenir cette erreur chaque fois que je dois redémarrer de force ma boîte virtuelle car elle se bloque. Mes validations git et mes pushes avant le blocage sont fine, donc dans mon cas la solution au problème était de copier juste le fichier objet manquant à partir d'un nouveau clone du dépôt. Merci @ShahVipul de m'avoir donné cette idée.