8

コミット ツリーの未使用のサイド ブランチ (実際の git ブランチではない) をどのようにクリーンアップしますか?

例 (ツリー、偽のコミット ハッシュ、コミット メッセージ、オプションの [ポインター]):

*    0001 last commit [master] [origin/master] [HEAD]
| *  0002 old, unused merge
|/|
* |  0003 some remote commits
* |  0004 another commit from remote
| *  0005 old, unused commits
|/
*    0006 old tree

パス 0001、0003、0004、0006 はそのままにしておく必要がありますが、コミット 0002 と 0005 は役に立たず、何の役にも立ちません。コミット 0002 と 0005 を削除するにはどうすればよいですか?

4

1 に答える 1

12

tarsiusは、別の質問への回答に次のように書いています。

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

これにより、reflog がクリアされ、リポジトリがクリーンアップされます。reflog によってマークされた無意味なコミットは、refloggit-gcの有効期限が切れない限り (デフォルトでは 90 日) 存続するため、最初に reflog を消去しても常に機能するとは限りません。

これを行った後、私が理解している限り、ぶら下がっているコミットはすべて本当になくなりました。したがって、それらすべてが本当にもう必要ないことを確認する必要があります。ぶら下がっているコミットのいくつかを本当に保持したい場合は、次のことができます。

git checkout <dangling_commit_id>
git branch <new_branch_name_of_your_choice>

またはgit format-patchを使用して、コミット全体をテキスト ファイルに保存します。

于 2012-08-01T12:18:20.927 に答える