web-dev-qa-db-ja.com

Git:宙ぶらりんのコミット/ブロブとは何ですか?どこから来たのですか?

ダングリングコミットとブロブに関する基本的な情報を探しています。

私のレポは問題ないようです。しかし、git fsckを初めて実行して、それが何をしたかを確認し、「ダングリングブロブ」のリストと「ダングリングコミット」を1つ持っています。

これらは何ですか?彼らはどこから来ましたか?彼らは私のレポの状態について何か異常なこと(良いか悪いか)を示していますか?

126
doub1ejack

Gitリポジトリを操作する過程で、操作を取りやめたり、中間のblobを引き起こす他の動きを行ったり、情報の損失を防ぐためにgitが行うこともあります。

最終的に(条件付きで git gcのmanページ に従って)、ガベージコレクションを実行し、これらをクリーンアップします。ガベージコレクションプロセスgit gcを呼び出して強制することもできます。

詳細については、git-scmサイトの Maintenance and Data Recover を参照してください。

GCの手動実行は、デフォルトでは、セーフティネットのこのコマンドの実行の2週間前に終了します。実際、GCを時々実行して、gitリポジトリを確実に使用できるようにすることをお勧めします。ただし、何でもそうですが、自分にとって重要なことを破壊する前に、それが何をしているのかを理解する必要があります。

80
vgoff

Dangling blob =ステージング領域/インデックスに行ったがコミットされなかった変更。 gitで驚くべきことの1つは、ステージング領域に追加されると、これらのblobがハッシュを持っているという点でコミットのように動作するため、いつでも元に戻すことができるということです!!

ダングリングコミット =子コミット、ブランチ、タグ、またはその他の参照によって直接リンクされていないコミット。これらも取り戻すことができます!

83
Elijah Lynn

http://www.tekkie.ro/news/howto-remove-all-dangling-commits-from-your-git-repository/ からgitリポジトリからぶら下がりコミットをすべて削除する方法

git reflog expire --expire=now --all
git gc --Prune=now

結局それらを必要とするかもしれないので、それらを本当に削除したいことを確認してください。

34
qxo