error: <your repository> did not send all necessary objects
GitHub 上の俺様リポジトリの CI/CD(GitHub Actions)で、パッチが当たったのでローカルをアップデートしようと git pull --rebase
したところ、"error: <リポジトリ名> did not send all necessary objects
" エラーが出始めました。
$ git pull --rebase
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 5 (delta 2), reused 2 (delta 2), pack-reused 2 (from 1)
Unpacking objects: 100% (5/5), 2.46 KiB | 2.46 MiB/s, done.
fatal: bad object refs/remotes/origin/HEAD 2
error: https://github.com/KEINOS/go-argonize.git did not send all necessary objects
落ち着いてエラーを読んでみると、"fatal: bad object refs/remotes/origin/HEAD 2
" とあります。どうやらリモートにはないオブジェクトがローカルのリポジトリにあり、それが bad object
なようです。
動作環境
$ sw_vers
ProductName: macOS
ProductVersion: 12.7.6
BuildVersion: 21H1320
$ git version
git version 2.47.0
$ gh version
gh version 2.60.1 (2024-10-25)
https://github.com/cli/cli/releases/tag/v2.60.1
対策
-
.git
内の指定されたオブジェクトを削除する
(ここでは.git/refs/remotes/origin/HEAD 2
)
$ cd .git/refs/remotes/origin/
$ # HEADのコピーができていることに注目
$ ls -lah
total 24
drwxr-xr-x@ 4 admin staff 128B 11 12 08:51 .
drwxr-xr-x@ 3 admin staff 96B 11 4 11:04 ..
-rw-r--r-- 1 admin staff 30B 10 16 03:11 HEAD
-rw-r--r--@ 1 admin staff 30B 10 13 15:08 HEAD 2
$ rm -f "HEAD 2"
$ ls
HEAD
$ cd ../../../..
$ git pull --rebase
Updating 14e8244..055ca0e
Fast-forward
go.mod | 4 ++--
go.sum | 8 ++++----
2 files changed, 6 insertions(+), 6 deletions(-)
$ echo $?
0
$ # 👍
原因
iCloud の同期息切れでコピペピピック
iCloud って、同期に失敗するとコピーを作る(例えば README.md
の同期中に変更があると README 2.md
を勝手に作る)ことが多くあります。
通常は目に見える範囲で作成されるため git status
などで気付くのですが、今回は .git
ディレクトリ内だったので気づき辛かったです。
あっちょんぶりけ