104 votes

Fatal: mauvais objet xxx

J'ai essayé de revenir à un commit git précédent avec :

git revert xxx

Je reçois maintenant cette erreur en réponse :

fatal: mauvais objet xxx

Qu'est-ce que je fais de travers ? Comment puis-je corriger cela ?

37voto

Prabowo Murti Points 389

Je ne connais pas la raison exacte pour laquelle cela se produit. Pour moi, c'est parce que j'oublie de tirer l'ensemble du dépôt sur mon ordinateur local. J'ai 2 chemins ou plus, et chaque chemin tire d'une branche différente

/chemin/branche_a/ -> tiré de la branche A
/chemin/branche_b/ -> tiré de la branche B

sur la branche A, j'ai apporté quelques modifications et j'ai validé comme d'habitude. Je veux que ce commit (par exemple l'ID du commit est abcdef123) apparaisse sur la branche B, donc j'utilise

$ cd /chemin/branche_b/
$ git branch
  master
  branche_a
* branche_b 

$ git cherry-pick abcdef123

Cela me donne ce genre d'erreur. Donc j'ai besoin de tirer l'ensemble du dépôt avant d'obtenir ce commit

$ git pull
remote: Comptage des objets: 257, fait.
remote: Compression des objets: 100% (58/58), fait.
remote: Total 216 (delta 187), réutilisé 186 (delta 158)
Réception des objets: 100% (216/216), 53.13 Kio | 43 Kio/s, fait.
Résolution des deltas: 100% (187/187), terminé avec 38 objets locaux.
Depuis github.com:nom_utilisateur/mon_depot
   abcdef3..80c0d68  branche_a    -> origine/branche_a
Déjà à jour.

$ git cherry-pick abcdef123 
[branche_b ccddeef] Quelques messages de commit
1 fichier modifié, 1 insertion(+), 1 suppression(-)

29voto

torek Points 25463

[Édition 1, 19 novembre 2016] Bien que cela indique parfois une corruption du dépôt, il s'avère que cela se produit sur Windows lorsque certaines commandes - généralement, un autre Git dans une autre tâche - tiennent des fichiers internes ouverts et verrouillés. Dans ce cas, la terminaison de l'autre tâche devrait régler le problème. La réponse originale est ci-dessous.

[Édition 2, 6 mai 2020] Supposons que xxx ci-dessus ressemble, par exemple, à b34789c0b0d3b137f0bb516b417bd8d75e0cb305 (un identifiant de hachage brut). Si vous l’avez obtenu en le copiant-collant, assurez-vous qu'il s'agit de ce dépôt (il est facile de récupérer un identifiant de hachage à partir d'un autre dépôt sans s'en rendre compte, surtout si vous avez plusieurs fenêtres ouvertes). Si vous l'avez retapé vous-même, assurez-vous qu'il n'y a pas de fautes de frappe. S'il s'agit de sous-modules, assurez-vous que le sous-module est à jour. Consultez les commentaires sur la question et certaines des réponses, y compris celle-ci.


mauvais objet avec un nombre hexadécimal tend à signifier qu'une balise possède un numéro de référence non valide, mais peut également se produire dans quelques autres cas étranges. Par exemple, si je fais un :

$ git tag foo
$ vi .git/refs/tags/foo

et que je change le dernier caractère (dans ce cas, de 6 à 5) et l'enregistre :

$ git log foo
fatal: mauvais objet foo

Que représente exactement le xxx ici et d'où provient-il ?

29voto

jorfus Points 1108

Je viens de rencontrer la même erreur (mauvais objet [hash]) en essayant de fusionner à partir d'une branche que mon client ne connaissait pas. (Similaire au cas de PrzeoR, mais au lieu d'avoir besoin d'un pull j'ai dû fetch)

Dans mon cas, j'ai dû exécuter git fetch pour resynchroniser mon client avec l'état du serveur. Je poste ceci ici au cas où quelqu'un arriverait sur ce fil de discussion de la même manière que moi et pourrait bénéficier de cette information.

git pull
git cherry-pick [hash]
fatal: mauvais objet [hash]
git fetch
remote: Comptage des objets: 8, terminé. (etc.)
Depuis github.com:repo/branch
 * [nouvelle branche] branchname

git cherry-pick [hash]
[réussite]

20voto

PrzeoR Points 717

Dans mon cas, j'ai sélectionné des commits d'une autre branche que je n'avais pas tirée, mais j'ai essayé de copier les identifiants des commits depuis GH (je ne les avais pas sur mon local où je faisais la sélection).

J'espère que cela aide ;-D

15voto

Sharan Salian Points 355

git fetch --all

La commande git fetch télécharge les commits, fichiers et références d'un dépôt distant dans votre dépôt local.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X