💬

破損した Git リポジトリの復旧手順

に公開

はじめに

Git で稀にこんなエラーが出ます。

error: object file .git/objects/xx/yyyyyy is empty

特に VSCode の DevContainer で子ディレクトリをルートとして開いたりしていると遭遇する気がします。
毎度復旧方法を調べるのも面倒なので、手順をまとめておきます。

手順

破損リポジトリをバックアップ

まず、壊れたリポジトリをディレクトリごと別名でバックアップしておきます。

mv your-project your-project-backup

新しくクローン

復旧したいリポジトリを新しくクローンします。

git clone <リポジトリURL> your-project

必要に応じてブランチも切り替えておきます。

古い作業ファイルをコピー

壊れたリポジトリがあるディレクトリから新しくクローンしたリポジトリへファイルをコピーします。

rsync -av --progress your-project-backup/ your-project/ --exclude='.git'

まとめ

色々頑張るよりクローンし直してコピーするのが一番確実だと思います。

Discussion