zły obiekt HEAD w git
jako tani, który korzysta z Apple iCloud (najgorszej usługi synchronizacji na świecie) jako usługi synchronizacji dla mojego Obsidian Second Brain, ostatnio często spotykałem się z tym problemem:
$ git status
fatal: bad object HEAD
$ git log
fatal: bad object refs/heads/main
Najlepszą odpowiedzią na Stackoverflow jest Mam 10 lat i każe ci rm -rf .gitktóry ofc nie jest tym, co chcesz zrobić „dobrze”.
Musiałem to naprawić kilka razy i dopiero niedawno rozwiązałem to za pomocą ChatGPT. Zapiszę tutaj dla potomności:
$ git fetch origin
$ git pull
$ git fsck
bad sha1 file: .git/objects/00/084ad8182051c580009e8ccc22e224d97a4823 2
bad sha1 file: .git/objects/02/8027ce244a5390478159b510bd6767d648e31f 2
bad sha1 file: .git/objects/03/8c235cd6cc3e93596b25d7fb0ab14d9a999ec7 2
bad sha1 file: .git/objects/05/72e5490252d8fd25230669000747a7032a14df 2
bad sha1 file: .git/objects/07/ecafe1981e587022b562562ce02fd0adc45beb 2
bad sha1 file: .git/objects/09/e5b5f51f4f9683155f7a81d4fad1321e4085ee 2
bad sha1 file: .git/objects/0a/47019b78b8fd69a1b1a2d96b2be442fbceaf49 2
bad sha1 file: .git/objects/0c/b9400cec84abac87519225f7e5ceca987e7f66 2
bad sha1 file: .git/objects/10/2a21b02d2f08c777bfe0066de28afe0df3290c 2
bad sha1 file: .git/objects/14/e8edad8d4898bc04c4a00ce0df268cf359df63 2
bad sha1 file: .git/objects/14/65567afb6ee576ceb3e3061ffdf9c4ccd47095 2
bad sha1 file: .git/objects/1a/ac8cf84058d474b8845fe4ff410a2a1bc5a25a 2
bad sha1 file: .git/objects/1b/5cf76bb3a880fcf70083fda0aa4d0faccb5864 2
Jeśli widzisz dużo „2”, oznacza to, że icloud cię pieprzy. rozwiązać z
find .git -type f -name '* (0-9)*' -delete
Wtedy możesz git fetch origin Ponownie.
Jeśli masz
$ git log
fatal: bad object refs/heads/main
potem biegnij
git update-ref -d refs/heads/main
$ git reset --hard origin/main
Może to pokazać kilka złych obiektów:
remote: Enumerating objects: 3899, done.
remote: Counting objects: 100% (888/888), done.
remote: Compressing objects: 100% (364/364), done.
remote: Total 3899 (delta 554), reused 597 (delta 523), pack-reused 3011
Receiving objects: 100% (3899/3899), 1.32 MiB | 9.92 MiB/s, done.
error: corrupt loose object 'dc3711cb3ba71eefe40c8e49cc9c9fb311d29553'
fatal: loose object dc3711cb3ba71eefe40c8e49cc9c9fb311d29553 (stored in .git/objects/dc/3711cb3ba71eefe40c8e49cc9c9fb311d29553) is corrupt
fatal: fetch-pack: invalid index-pack output
fatal: Could not parse object 'origin/main'.
Zatem poprawka jest następująca:
rm -f .git/objects/dc/3711cb3ba71eefe40c8e49cc9c9fb311d29553
git fetch origin
Dzisiaj też miałem taki problem:
$ git fsck
error: corrupt loose object '25726bffc0e97532098679d0ed04095710452d29'
error: unable to unpack contents of .git/objects/25/726bffc0e97532098679d0ed04095710452d29
error: 25726bffc0e97532098679d0ed04095710452d29: object corrupt or missing: .git/objects/25/726bffc0e97532098679d0ed04095710452d29
error: corrupt loose object '5b4e2ac94c33715545674545e501a705ea20924b'
error: unable to unpack contents of .git/objects/5b/4e2ac94c33715545674545e501a705ea20924b
error: 5b4e2ac94c33715545674545e501a705ea20924b: object corrupt or missing: .git/objects/5b/4e2ac94c33715545674545e501a705ea20924b
error: corrupt loose object 'ad7ceee5b187af409cbd2219bc4b578faf425471'
error: unable to unpack contents of .git/objects/ad/7ceee5b187af409cbd2219bc4b578faf425471
error: ad7ceee5b187af409cbd2219bc4b578faf425471: object corrupt or missing: .git/objects/ad/7ceee5b187af409cbd2219bc4b578faf425471
error: corrupt loose object 'fdacf1b391398e4548fa3a9f09b0f6714881907c'
error: unable to unpack contents of .git/objects/fd/acf1b391398e4548fa3a9f09b0f6714881907c
error: fdacf1b391398e4548fa3a9f09b0f6714881907c: object corrupt or missing: .git/objects/fd/acf1b391398e4548fa3a9f09b0f6714881907c
Checking object directories: 100% (256/256), done.
Checking objects: 100% (27396/27396), done.
missing blob 60e0633917e44a958f890039cff7297f99d8e8eb
dangling commit d885e9e214a1f84ce5feb8fdcdf51a27249e689e
dangling commit a38bc134bc0ec9741e7abbfa8ee200a0c82253d6
missing blob fdacf1b391398e4548fa3a9f09b0f6714881907c
missing blob 5b4e2ac94c33715545674545e501a705ea20924b
missing blob 25726bffc0e97532098679d0ed04095710452d29
missing blob f2f68aa9deda03f256574d468395e840144d9d05
missing blob ad7ceee5b187af409cbd2219bc4b578faf425471
dostałem wiele rekomendacji z egzotycznymi opcjami, ale ostatecznie rozwiązaniem było to
git reset <last good remote commit>
git stash
git fetch origin
git stash pop
git add . && git commit -m "add back new stuff"
git push origin main
