1. ホーム
  2. git

[解決済み] ブランチが存在しないGitコミットの一覧表示と削除(dangling?)

2022-04-22 16:03:36

質問

Git リポジトリにたくさんのコミットがあり、特定のブランチには属していないのですが、次のようなことができます。 git show しかし、それらを含むブランチをリストアップしようとすると、何も報告されません。

これはダングリングコミット/ツリーの問題(-Dブランチの結果)だと思ったので、レポをプルーニングしましたが、その後も同じ動作が見られます。

$ git fetch origin

$ git fsck --unreachable
$ git fsck

出力もなく、何もぶら下がらない(よね)。しかし、コミットは存在します

$ git show 793db7f272ba4bbdd1e32f14410a52a412667042
commit 793db7f272ba4bbdd1e32f14410a52a412667042
Author: ...

というように、どのブランチを通しても到達できない。

$ git branch --contains 793db7f272ba4bbdd1e32f14410a52a412667042

は何も出力しません。

そのコミットの状態は一体どうなっているのでしょうか?同じような状態のコミットをすべてリストアップするにはどうしたらいいでしょうか? そのようなコミットを削除するにはどうすればいいのでしょうか?

解決方法は?

<ブロッククオート

出力されない、ぶら下がらない(だろう?)

reflogから参照されたコミットは到達可能であるとみなされることに注意してください。

<ブロッククオート

そのコミットは具体的にどのような状態なのでしょうか?同じような状態を持つコミットをすべてリストアップするにはどうすればよいですか?

パス --no-reflogs を説得する git fsck を表示させることができます。

このようなコミットを削除するにはどうすればよいですか?

reflogのエントリーが期限切れになると、それらのオブジェクトも git gc .

有効期限は、以下のように規定されています。 gc.pruneexpire , gc.reflogexpire および gc.reflogexpireunreachable を設定します。参考までに git help config .

デフォルトはすべて非常に合理的です。