Зафиксированный большой файл испортил мой GIt-репозиторий - PullRequest
4 голосов
/ 27 октября 2010

Я хотел переместить файл sql на мой промежуточный сервер, который был связан с некоторым кодированием. Я упустил из виду тот факт, что это был 1Gig в размере и зафиксировал файл. Я не помню, закончил ли он когда-либо, но я продолжал вносить другие изменения из других файлов. Теперь, когда я на своем промежуточном сервере и извлекаю или извлекаю изменения из разработки, я получаю ошибку нехватки памяти. Я смотрел top в моей системе dev, и вся память используется во время выборки.

Есть ли способ заставить Git полностью забыть, что я когда-либо фиксировал большой файл sql? Моя система разработки - MacOS, а подготовка - Linux.

1 Ответ

3 голосов
/ 27 октября 2010

Да.Но вам придется сообщить любому, кто попытался повторно клонировать хранилище, чтобы избежать головной боли позже.Что вам нужно сделать, так это перебазировать интерактивную ветвь, в которой находится коммит, и удалить коммит.Фиксация сохраняется около 30 дней (по умолчанию) с того момента, когда никакая другая ссылка (ветка, тег и т. Д.) Не ссылается на нее.Это даст вам достаточно времени, чтобы передумать позже.Конечно, если вы хотите, вы можете сократить reflog, а затем собрать мусор в хранилище, чтобы сразу сжать хранилище.

Например:

git checkout contaminated-branch
git rebase -i HEAD~100  # if 100 commits ago is long enough

Тогда у вас будет редактороткрыть, перечисляя коммиты с 100 коммитов назад.Найдите коммит, в который вы добавили этот большой файл, и удалите его строку в редакторе.Сохраните и выйдите.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...