ダングリングコミットとブロブに関する基本情報を探しています。
私のリポジトリは元気そうです。しかし、私はgit fsck
それが何をしているかを確認するために初めて走りました、そして、「ぶら下がっているブロブ」と単一の「ぶら下がりコミット」の長いリストがあります。
これは何だ?彼らはどこから来ましたか?彼らは私のレポの状態について何か異常なこと(良いか悪いか)を示していますか?
ダングリングコミットとブロブに関する基本情報を探しています。
私のリポジトリは元気そうです。しかし、私はgit fsck
それが何をしているかを確認するために初めて走りました、そして、「ぶら下がっているブロブ」と単一の「ぶら下がりコミット」の長いリストがあります。
これは何だ?彼らはどこから来ましたか?彼らは私のレポの状態について何か異常なこと(良いか悪いか)を示していますか?
回答:
gitリポジトリでの作業中に、最終的に操作を取り消したり、中間のブロブを引き起こしたり、情報の損失を回避するためにgitが実行するいくつかのことを行ったりすることがあります。
最終的には(条件付きでgit gcのmanページによると)、ガベージコレクションを実行し、これらをクリーンアップします。ガベージコレクションプロセスを呼び出すことによって、強制することもできgit gc
ます。
この詳細については、git-scmサイトのメンテナンスとデータ復旧を参照してください。
GCの手動実行は、デフォルトで、セーフティネットのこのコマンドの実行の2週間前に残されます。実際、GCを時々実行して、gitリポジトリを確実に使用できるようにすることをお勧めします。しかし、何でもそうですが、自分にとって重要である可能性のあるものを破壊する前に、それが何をしているかを理解する必要があります。
Dangling blob =ステージング領域/インデックスに到達したがコミットされなかった変更。gitのすばらしい点の1つは、ステージング領域に追加されると、ハッシュを持っているという点でこれらのblobがコミットのように動作するため、いつでも元に戻すことができるということです。
Dangling commit =子のコミット、ブランチ、タグ、またはその他の参照によって直接リンクされていないコミット。あなたもこれらを取り戻すことができます!
HOWTO 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
結局のところ、必要な場合があるので、本当に削除したいか確認してください。
ぶら下がりコミットとは、参照に関連付けられていないコミットです。つまり、参照に到達する方法がありません。
たとえば、次の図を検討してください。変更をマージせずにブランチfeatureXを削除するとします。関連付けられている参照がないため、コミットDはぶら下がりコミットになります。マスターにマージされていた場合、HEADとマスターの参照はDをコミットするように指示し、featureXを削除したとしても、ぶら下がることはありません。これについては、図の後にある注意事項をよく読んで理解してください。
Gitは、ぶら下がりコミットを自動的にガベージコレクション(つまり、破棄)します。を使用して、git reflog
マージされずに削除された(ダングリングコミットの)ブランチを回復できます。削除されたコミットは、ローカルオブジェクトストアに存在する場合にのみ復元できます。ガベージコレクションされた場合、それを回復することはできません。
ブランチ名、つまりブランチラベルは、実際にはブランチの最新のコミット、つまりブランチの先端への参照であることに注意してください。上の図では、featureX、master、およびHEADは特定のコミットへの参照にすぎません。featureXとマスターラベルは、それぞれのブランチの最新のコミットを参照します。HEADは通常、現在チェックアウトされているブランチ(この場合はマスター)の先端を指します。現在のブランチで古いコミットをチェックアウトすると、HEADは切り離された状態になります。つまり、最新のコミットではなく古いコミットを指します。また、HEADは実際には現在のブランチラベルを指し、ブランチラベルは常にブランチの先端を指すので、HEADはシンボリックリファレンスと呼ばれることにも注意してください。したがって、通常の状況では、HEADは間接的に最新のコミットを指します。
余談ですが、Gitはコミットグラフ/履歴を有向非循環グラフとして表すことに注意してください。各コミットには、その親への参照があります。したがって、コミット図の矢印は、子コミットから親コミットを指しています。ブランチで古いコミットに到達するには、最新の子コミットへの参照が必要です。
PS-上の図と理解は、この無料コースから得られました。コースはかなり古いですが、知識はまだ関連しています。
git gc
、でこれらを削除しても安全です。2)これらのぶら下がりビットは正常であり、すでにgitであるため、これを心配する必要はありません。それらを処理しますか?