Ich habe riesige Git-Repository (Binärdateien) und ich möchte alte Commits löschen, um seine Größe zu verkleinern.Git - wie alte commits zu löschen, ohne die letzten commits sha-1 zu beeinflussen?
Übernehmen Sie meine Commit-Geschichte;
$ git log
g0g0g0 - patch 06
f0f0f0 - patch 05
e0e0e0 - patch 04
d0d0d0 - patch 03
c0c0c0 - patch 02
b0b0b0 - patch 01
aaaaaa - initial empty
Und jedes commits hat tag;
$ git tag
tag01 -> b0b0b0
tag02 -> c0c0c0
tag03 -> d0d0d0
tag04 -> e0e0e0
tag05 -> f0f0f0
tag06 -> g0g0g0
Hier ist was ich will;
$ 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
Ist es möglich, alte drei Commits (b0b0b0, c0c0c0, d0d0d0) zu löschen, ohne andere begehen die sha-1-Werte zu ändern (g0g0g0, f0f0f0, e0e0e0)?
Sie können einen flachen Klon erstellen, oder wenn Sie mehr Präzision benötigen, können Sie Grafts und benutzerdefinierte Konstruktpacks mit 'git rev-list --objects' und' git pack-objects' verwenden und dann '.git/objects/ersetzen. pack 'mit den Ergebnissen. Dies funktioniert jedoch nur im lokalen Repo. Sie können den veröffentlichten Verlauf nicht ändern, ohne die veröffentlichten IDs zu ändern. – jthill