От вашего вопроса, я думаю, вы хотите что-то вроде это .
git-rebase (1) делает именно это.
$ git rebase -i HEAD~5
git awsome-ness содержит пример.
- Не использовать
git-rebase
для публичных (удаленных) коммитов.
- Убедитесь, что ваш рабочий каталог чист (
commit
или stash
ваши текущие изменения).
- Запустите приведенную выше команду. Он запускает ваш
$EDITOR
.
- Заменить
pick
до C
и D
на squash
. Он объединит C и D в B. Если вы хотите удалить коммит, просто удалите его строку.
Если вы потерялись, введите:
$ git rebase --abort
Однако для безопасного сжатия папки .git вышесказанное не рекомендуется. Вы можете попробовать следующее, как упомянуто в комментарии Линуса.
git repack -a -d --depth=250 --window=250
где значение глубины заключается в том, насколько глубоки могут быть дельта-цепочки (сделайте их длиннее для старой истории - это стоит затрат на пространство), а в смысле окна - насколько велико окно объекта, которое мы хотим, чтобы каждый кандидат-дельта сканировал .