Вопрос об отмене предыдущего нажатия на удаленный репозиторий был задан несколько раз, но мне кажется, что ответы неполны. Следуя рекомендациям в Git - Undo pushed commits, я могу сбросить удаленный репозиторий, чтобы его поведение было таким, как будто последнее совершение никогда не происходило. Тем не менее, кажется, что эффекты отмененного фиксации все еще отображаются в размере репозитория git.git uno эффекты от нажатой фиксации на размер репозитория
Вот гипотетическая ситуация: пользователь делает git add
, git commit
, что ставит огромный файл, «BigFatFile.bin» в систему управления версиями. Он перенаправляет изменения в удаленный репозиторий. Предположим, что этот файл ОГРОМНЫЙ, возможно, 1 ГБ. Мы не хотим поддерживать такие файлы в git. Поэтому мы пытаемся отменить этот плохой фиксатор следующим образом:
- Клонировать удаленный репозиторий.
- Сделайте
git reset --hard HEAD^
, чтобы удалить последнюю фиксацию. - Сделайте
git push -f
, чтобы внести изменения в удаленный репозиторий.
Это похоже на работу, за исключением того факта, что эффекты нажатия все еще видны в размере удаленного репозитория. Его размер вырос на 1 ГБ.
Можно на локальной копии репозитория делать шаги по очистке, используя git reflog
и git gc
и git repack
, что уменьшает размер локального хранилища, каким он был до того, как совершить из «BigFatFile.bin». Но делать git push
(или git push -f
), похоже, не уменьшает размер удаленного репозитория.
Как я могу окончательно отменить последнюю нажатую фиксацию так, чтобы размер репозитория возвращался к тому, что было до нажатия?
Большое вам спасибо. У меня есть доступ к серверу (не GitHub), поэтому я могу запустить этот код. Я немного смутился о том, какие команды можно запускать в голом репозитории и какие команды не могут, поэтому я предположил, что очистка должна быть выполнена в клонированном репозитории, а затем нажата. –
@DarylMcCullough вы можете использовать эти команды в голом репо на стороне сервера. – VonC