Кажется, что моя первоначальная фиксация составляет 90% пространства, поскольку она случайно сделана с большим количеством медиафайлов. Есть ли способ удалить только первую фиксацию из локального и удаленного репозиториев, или я должен просто оставить это?
Можно ли удалить начальную фиксацию из репозитория Git?
Ответ 1
Похоже, вы уже делили репозиторий с рядом других пользователей. Если это так, то вы, вероятно, должны просто жить с ним.
Если вы контролируете все клоны, вы можете переписать историю поверх модифицированного корневого коммита с удаленными файлами. Обратите внимание, что вы не должны этого делать, если другие разработчики уже работают с этой веткой.
Если вы переписываете историю, вы можете попробовать следующее. Обратите внимание, что поскольку git хранит журналы, в которых недавно было зафиксировано ваше сообщение HEAD (reflogs), крупные объекты не будут немедленно исчезать из вашего репозитория или других репозиториев, которые уже имеют их, даже если вы пытаетесь выполнить git gc
или git gc --prune
. Тем не менее, он гарантирует, что любые новые клоны не получат выборку больших объектов как часть истории ведущей ветки.
Предполагая, что ваш рабочий каталог "чистый":
# Go back the initial commit
git checkout <SHA1_of_old_root>
# Clean up the index to remove unwanted files, e.g. using git rm <files>
# ...
# Amend the initial commit with the new tree. Note the sha1 of the new commit
git commit --amend
# Go back to the master branch
git checkout master
# Re-apply all the commits onto the new root
git rebase --onto <SHA1_of_new_root> <SHA1_of_old_root>
Ответ 2
В качестве альтернативы вы можете использовать git filter-branch для удалите файлы с нарушениями (см. раздел "ПРИМЕРЫ" ), но он также переписывает историю. Таким образом, любой, кто основывал свой код на верхней части своей старой истории, стал бы плохой сюрприз...