dangling なファイルを探す機会があったのでメモします。
dangling なファイルとは、Git データベースに存在するのに使われていないファイルのことです。fsck
に --no-reflogs
オプションをつけない場合は、reflog からたどれるファイルも考慮されます。
# dangling なファイルのオブジェクト ID (SHA1 ハッシュ) を出力
git fsck --no-progress |grep blob |sed -Ee 's/.* blob //' >.git/dangling.txt
# 一つずつ less に出力される
cat .git/dangling.txt |while read LINE || [ -n "$LINE" ]; do { echo -e "$LINE\n"; git cat-file -p $LINE; } |less; done
上記のコマンドを実行すると一つずつ less に出力されるので q
を押して次、次、次と、目的のファイルを探します。
ファイルを間違えて reset
してしまいましたが、幸いにも一度 add
していたので Git データベースには残っていて、これで見つけることができました。
参考文献
- man git-fsck
- man git-cat-file
-
git fsck: how --dangling vs. --unreachable vs. --lost-found differ? - Stack Overflow
- dangling ⊆ unreachable で stash にちがいがあるらしい