2011-08-07 14 views
11

gitリポジトリにガベージ・コミットがあります。これらは、例えば、最新のコミットをもう一度変更して、誤って追加のコミットを作成するときは、git gui。不要なgitコミットを削除するには?

私はHEADが割り当てられていない(分岐していない、ブランチの一部ではない)コミットがいくつかあります。

私が整理したいのは、私の質問です:これらのコミットを削除するにはどうすればいいですか(F、G、H参照)?これは、リベースまたは復帰またはリセットを使用して行われますか?または別のツールを使用していますか?どのコミットで私はそれをするために座る必要がありますか?

A -- B -- C -- D -- E [master] 
     \-- F -- G 
      \-- H 

おかげ

クリスチャン

+0

可能[リストの重複やGitは何の下にされていないことをコミット削除ブランチ(ダングリング?)](http:// stackoverflow .com/questions/3765234/listing-and-deletting-git-commits-that-under-no-branch-dangling) – hunse

答えて

17

これを試してみてください:

git reflog expire --expire=now 
git gc --prune=now 
+0

これは何も変更されませんでした。申し訳ありません –

+1

@Christian Wolf:それでも何も変わらなければ、コミットF、G、Hは* something *で参照されます。おそらく、それらを指すタグがありますか?または隠しですか?私たちは知らない。 –

+0

@Christian: 'git fsck --unreachable'を使ってこれらのコミットが実際にぶら下がっていることを確認しましたか?そうでない場合、gc/pruneの量はそれらを削除しません。最初にリファレンスを削除する必要があります。 – cdhowie

0

を以下の操作を行います。

git config gc.reflogexpireUnreachable = now 
git gc --prune=now 
git config gc.reflogexpireUnreachable = 3 days 
関連する問題