2016-07-25 14 views
0

私は巨大なgitリポジトリ(バイナリファイル)を持っており、サイズを縮小するために古いコミットを削除したいと思います。Git - 最近のコミットのsha-1に影響を与えずに古いコミットを削除する方法?

私のコミット履歴を仮定します。

$ git log 
g0g0g0 - patch 06 
f0f0f0 - patch 05 
e0e0e0 - patch 04 
d0d0d0 - patch 03 
c0c0c0 - patch 02 
b0b0b0 - patch 01 
aaaaaa - initial empty 

各コミットにはタグがあります。

$ git tag 
tag01 -> b0b0b0 
tag02 -> c0c0c0 
tag03 -> d0d0d0 
tag04 -> e0e0e0 
tag05 -> f0f0f0 
tag06 -> g0g0g0 

これは私が欲しいものです。

$ git log 
g0g0g0 - patch 06 <- tag06 
f0f0f0 - patch 05 <- tag05 
e0e0e0 - patch 04 <- tag04 
aaaaaa - initial empty 

$ git tag 
tag01 -> deleted b0b0b0 
tag02 -> deleted c0c0c0 
tag03 -> deleted d0d0d0 
tag04 -> e0e0e0 
tag05 -> f0f0f0 
tag06 -> g0g0g0 

それは(e0e0e0、g0g0g0、f0f0f0)他のコミットのSHA-1値を変更せずに、古い3つのコミット(b0b0b0、C0C0C0、d0d0d0)を削除することは可能ですか?

+0

浅いクローンを作成することもできますし、精度が必要な場合は、 'git rev-list --objects'と' git pack-objects'を使ってグラフトやカスタムコンストラクトパックを使用し、 '.git/objects /結果を「パック」します。しかし、これはローカルリポジトリでのみ機能します。公開IDを変更せずに公開履歴を変更することはできません。 – jthill

答えて

8

いいえ、不可能です。コミットの親はハッシュを計算するために使用されます。履歴の一部が変更された場合、コミットハッシュは異なります。

関連する問題