Удаление большого файла, застрявшего в Git Push - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть уникальная ситуация, когда я добавил файлы размером 2> 50 МБ, и Git не может их обработать. Я совершил их и попытался подтолкнуть, но он ошибается и говорит, что он слишком большой. Это нормально, сейчас я могу работать, но теперь я внес изменения и после добавления тех файлов, которые я хотел бы сохранить. Итак, теперь у меня есть 8 готовых к отправке коммитов, как только я могу избавиться от больших файлов и заставить их работать снова.

Я использовал git rm --cached largefile.whatever и не могу видеть большие файлы в git diff --stat --cached origin/master, но когда я нажимаю, он все еще толкает в течение 20 минут, а затем говорит, что файлы слишком велики.

Я также удалил большие файлы и выдвинул удаление, но все еще та же проблема.

Я хочу сохранить всю мою недавнюю работу, но удалить большие файлы и двигаться дальше. Как я могу это сделать?

Вот мой процесс коммита. Хотелось бы, чтобы было так же легко вернуться назад 1, но сейчас я вырыл себя в яму. Я не лучший в git, так что я надеюсь, что это имеет смысл.

Я не могу git rm, поскольку файл уже удален. Он не отображается в каталоге и говорит myfile.tif did not match any files

Git Log

1 Ответ

2 голосов
/ 29 апреля 2019

Вы можете попробовать сделать "интерактивную перебазирование". «Rebase» обычно означает перемещение набора коммитов в другой базовый коммит, но в этом случае мы бы переместили коммиты в то же место в дереве, где они были, только используя «интерактивные» функции команды.

Скажите, что идентификатор фиксации для коммита, добавившего большие файлы, равен abc123. Тогда вы запустите:

git rebase --interactive abc123^

(обратите внимание на конечную каретку: мы перебираемся на родителя этого коммита)

Это приведет вас к текстовому редактору, содержащему что-то вроде этого:

pick abc123 New garage, touch ups to lava 3
pick def456 ADded garage play, removed giant Tif file
[ ... and so on ... ]

В первой строке измените pick на edit, сохраните и выйдите. git rebase теперь войдет в состояние, в котором этот коммит был поставлен, но еще не зафиксирован, и вы можете изменить коммит:

git rm --cached my-large-file.tiff my-other-large-file.tiff

Затем введите git rebase --continue. Он создаст новый коммит с тем же сообщением коммита и тем же содержимым, что и у старого коммита, за исключением файлов большого размера. Затем он перебазирует все следующие коммиты поверх вновь созданного коммита.

Как только все это будет сделано, у вас будет новая ветвь без каких-либо следов больших файлов, готовая к слиянию в master.

...