Git rm - fatal: pathspec не соответствует никаким файлам
Я добавил более 9000 фотографий случайно в папку проекта. И совершил их. Затем удалили их с диска. Совершенные.
Теперь я пытаюсь перенаправить изменения на сервер git. Но это занимает слишком много времени и пытается отправить 12 Гб данных.
Я проверил размер файлов на диске и увидел, что действительно .git
занимает 12 Гб.
Как удалить фотографии оттуда? Я пробовал git rm
, но не удалось:
❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files
Потому что я все их удалил с диска, но они все еще находятся в папке .git
.
Я попытался добавить public/photos
в .gitignore
:
public/photos/
*.zip
Но никакого результата.
Конечно, я мог бы hard reset head
до момента, когда у меня не было так много нежелательных фотографий в моем проекте. Но с тех пор я совершил много раз и внес много изменений в код.
Ответы
Ответ 1
В вашем случае используйте git filter-branch
вместо git rm
.
git rm
будет удалять файлы в том смысле, что они больше не будут отслеживаться с помощью git, но это не удаляет старые объекты фиксации, соответствующие этим изображениям, и поэтому вы все равно будете зацикливаться на том, которые соответствуют 12 ГБ изображений.
git filter-branch
, с другой стороны, может также удалить эти файлы из всех предыдущих коммитов, тем самым устраняя необходимость нажатия любого из них.
-
Используйте команду
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch public/photos' \
--prune-empty --tag-name-filter cat -- --all
-
После завершения ветвления фильтра убедитесь, что нет непреднамеренного файла.
-
Теперь добавьте правило .gitignore
echo public/photos >> .gitignore
git add .gitignore && git commit -m "ignore rule for photos"
-
Теперь сделайте push
git push -f origin branch
Отметьте этот, this и для дальнейшей помощи. Чтобы быть на более безопасной стороне, я предлагаю вам создать резервную копию репо в вашей системе, прежде чем выполнять эти инструкции.
Что касается вашего сообщения об ошибке, это происходит потому, что вы уже не отслеживали их с помощью git rm
, и, следовательно, git жалуется, потому что он не может удалить файл, который он не отслеживает. Подробнее читайте здесь.
Ответ 2
Очень простой ответ:
Шаг 1:
Сначала добавьте ваши необработанные файлы, которые вы хотите удалить, с помощью git add .
или git add <filename>
.
Шаг 2:
Затем легко удалите их, используя команду git rm -f <filename>
здесь rm= удалить и -f =.
Ответ 3
Шаг 1
Добавьте имя файла в файл .gitignore
.
Шаг 2
git filter-branch --force --index-filter \
'git rm -r --cached --ignore-unmatch YOURFILE' \
--prune-empty --tag-name-filter cat -- --all
Шаг 3
git push -f origin branch
Большое спасибо @mu.
Ответ 4
git stash
сделал работу,
Он восстановил файлы, которые я удалил, используя rm
вместо git rm
.
Я сделал сначала проверку последнего хэша, но я не верю, что это требуется.
Ответ 5
Эти цепочки работают в моем случае:
git rm -r WebApplication/packages
Было подтверждение git-диалога. Вам следует выбрать вариант "у".
git commit -m "blabla"
git push -f origin <ur_branch>
Ответ 6
Чтобы удалить отслеженный и старый зафиксированный файл из git, вы можете использовать команду ниже. Здесь, в моем случае, я хочу распаковать и удалить все файлы из каталога dist
.
git filter-branch --force --index-filter 'git rm -r --cached --ignore-unmatch dist' --tag-name-filter cat -- --all
Затем вам нужно добавить его в свой .gitignore
, чтобы он не отслеживался дальше.