Подтвердить что ты не робот

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 до момента, когда у меня не было так много нежелательных фотографий в моем проекте. Но с тех пор я совершил много раз и внес много изменений в код.

4b9b3361

Ответ 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

Эти цепочки работают в моем случае:

  1. git rm -r WebApplication/packages

Было подтверждение git-диалога. Вам следует выбрать вариант "у".

  1. git commit -m "blabla"
  2. 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, чтобы он не отслеживался дальше.