Нет, это не повлияет на исходный запущенный экземпляр - он уже загружен в память и не будет изменен.
На самом деле ни один из этих методов не помог мне. Я обнаружил, что наиболее надежным было просто вставить локально в другое репо:
git pull file://$(pwd)/myGitRepo
Это также избавит вас от хлопот с удалением старых тегов.
см. Историю в моем блоге: http://stubbisms.wordpress.com/2009/07/10/git-script-to-show-largest-pack-objects-and-trim-your-waist-line/
В книге ProGit есть интересный раздел Удаление объекта .
Он заканчивается следующим образом:
Ваша история больше не содержит ссылки на этот файл.
Однако вашreflog
и новый набор ссылок, который Git добавил, когда вы сделалиfilter-branch
под.git / refs / original
, все еще работает, так что вы придется удалить их, а затем заново упаковать базу данных. Вам нужно избавиться от всего, что имеет указатель на эти старые коммиты, прежде чем вы переупаковываете:
$ rm -Rf .git/refs/original
$ rm -Rf .git/logs/
$ git gc
$ git prune --expire
( git prune --expire
не является обязательным, но может удалить содержимое каталога из незакрепленных объектов)
Сделайте резервную копию всего перед выполнением этих команд, на всякий случай;)
git-filter-branch по умолчанию сохраняет старые ссылки в пространстве имен refs / original / *
.
Вам нужно удалить их, и , затем , выполните git gc --prune = now
If you want to go the manual cleanup route, there are some more files that may also contain a ref to the position of your original branch before the git-filter-branch. For example, I filtered my "home" branch:
.git/info/refs:
179ad3e725816234a7182476825862e28752746d refs/original/refs/heads/home
.git/packed-refs:
179ad3e725816234a7182476825862e28752746d refs/original/refs/heads/home
After I removed those lines, gitk did not show the old commits any more.