Полностью удалить (старые) коммиты git из истории

Я начинаю проект с помощью git, где я буду коммитить очень большие файлы, но только несколько раз в неделю. Я пытался использовать git как есть, и кажется, что он сохраняет весь файл в каждой фиксации, где он изменен. Это не сработает для этого проекта, репозиторий выйдет из-под контроля. Итак, я хочу уменьшить размер репозитория.

Моя первая мысль заключалась в том, чтобы «просто» удалить все коммиты старше двух недель, или сохранить, например, пять коммитов в истории (это, вероятно, лучше :)). ' Я искал в Google и много читал из Книги сообщества Git, и я думаю, мне нужно будет работать с git-rebase или git-filter-branch . Дело в том, что я просто не могу заставить его работать.

Просто для иллюстрации; У меня есть история H только с одной веткой (главная ветка)

A -> B -> C -> D -> E

Я хочу удалить некоторые предыдущие коммиты, чтобы моя история выглядела как

C -> D -> E

Коммиты A и B должны быть полностью удалены. Я пробовал git-rebase , но кажется, что он объединяет коммиты вместе, а не удаляет старые, возможно, я не совсем понимаю, как работает rebase. Еще одна мысль, которая у меня возникла, заключалась в том, чтобы удалить все из .git / objects, а затем создайте новую фиксацию, используя git-hash-object -w , git-mktree и git-commit-tree , мне еще не удалось отправить это «искусственное» дерево на сервер.

Я не буду работать ни с каким ветки, поэтому нет необходимости их учитывать.

Мне интересно, может ли кто-нибудь дать мне конкретное использование git-rebase , если это то, что я должен использовать? Или еще несколько советов, примеров того, что я могу сделать.

Ура!


Изменить:

Большие файлы не всегда будут такими же большими, а некоторые файлы будут заменены новыми. Я хочу, чтобы эти замененные файлы были полностью удалены из истории.

26
задан Thinner 13 February 2011 в 23:39
поделиться