2010-10-26 2 views
4

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

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

ответ

3

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

Например:

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

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

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