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

Я никогда раньше не сталкивался с этой проблемой и понятия не имею, как это возможно. У меня был действительно большой каталог, который я по ошибке загрузил в мое git-репо. Я случайно сделал git add . поэтому большой каталог был добавлен в рабочее дерево, и когда я попытался зафиксировать, он не позволил мне, так как файл был слишком большим. Тогда я не сделал git rm и непосредственно удалил файл из файловой системы. В следующий раз, когда я попытался сделать коммит, он не позволил мне и все еще жалуется, что каталог (который больше не присутствует в файловой системе) слишком велик.

Разве удаление файла из файловой системы также не удаляет его из рабочего дерева git?

Если есть способ отменить мои последние 2 коммита без потери изменений, а затем повторно перенести его на удаленный, это было бы здорово.

1 ответ

Решение

Вам нужно удалить его из индекса перед фиксацией:

git rm --cached FOLDER_NAME

Поскольку он уже удален из файловой системы, папка должна была исчезнуть.

Если вы добавили папку в самый последний коммит, вы можете просто выполнить:

git commit --amend
git push -f REMOTE BRANCH_NAME

Если вы добавили папку в предпоследнем коммите, все становится немного сложнее. Я предлагаю сначала создать резервную копию локального репо.

Следуй этим шагам:

# Rebase the second most recent commits
# -i will open an editor
git rebase -i HEAD~2

В редакторе замени pick от edit в строке со вторым последним коммитом и сохраните файл. Теперь вы можете изменить этот коммит. Выпуск:

git rm FOLDER_NAME

# This will open an editor again. You can leave the
# commit message unchanged. Simply save the file
git commit --amend

# Finish the rebase action
git rebase --continue

Теперь все готово, и папка удалена из этого коммита. Вы можете нажать с помощью

git push REMOTE BRANCH_NAME
Другие вопросы по тегам