git rm - fatal: pathspec не соответствовал никаким файлам

я случайно добавил более 9000 фотографий в свою папку проекта. И совершил их. Затем удалил их с диска. Привержен.

теперь я пытаюсь нажать изменения на Git server. Но это занимает слишком много времени и пытается отправить 12 Гб данных.

Я проверил размер файлов на диске и вижу, что действительно .git папка занимает 12 Гб.

Как удалить фотографии оттуда? Я пытался!--3-->, но терпит неудачу:

❯ git rm public/photos
fatal: pathspec 'public/photos' did not match any files

потому что я уже удалил их с диска, но они все еще в .

Я пытался добавить public/photos to .gitignore:

public/photos/
*.zip

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

5 ответов


в вашем случае, использовать git filter-branch вместо git rm.

git rm удалит файлы в том смысле, что они больше не будут отслеживаться git, но это не удаляет старые объекты фиксации, соответствующие этим изображениям, и поэтому вы все равно будете застрять с нажатием более ранних фиксаций, которые соответствуют 12 ГБ изображений.

на git filter-branch, С другой стороны, можно удалить эти файлы из всех предыдущих коммитов, а также, таким образом, покончить с необходимость подтолкнуть любого из них.

  1. используйте команду

    git filter-branch --force --index-filter \
      'git rm -r --cached --ignore-unmatch public/photos' \
      --prune-empty --tag-name-filter cat -- --all
    
  2. после завершения ветви фильтра убедитесь, что непреднамеренный файл не был потерян.

  3. теперь добавьте a .правило гитюдного

    echo public/photos >> .gitignore
    git add .gitignore && git commit -m "ignore rule for photos"
    
  4. Теперь нажимаем

    git push -f origin branch
    

Регистрация этой, этой и этой для получения дополнительной помощи. Просто на более безопасная сторона, я бы предложил вам создать резервную копию РЕПО в вашей системе, прежде чем приступать к этим инструкциям.

Что касается вашего оригинального сообщения об ошибке, это происходит потому, что вы уже отследили их с помощью git rm, и, следовательно, git жалуется, потому что он не может удалить файл, который он не отслеживает. Читать подробнее об этом здесь.


очень простой ответ.

Шаг 1:

Сначала добавьте свои неотслеженные файлы, которые вы хотите удалить с помощью git add . или git add <filename>.

Шаг 2:

затем удалите их легко с помощью команды git rm -f <filename> здесь rm=удалить и - f=forcely.


Шаг 1

добавьте имя файла(ов) в свой .

Шаг 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.


git stash 

сделал работу, Он восстановил файлы, которые я удалил, используя rm вместо git rm.

Я сделал сначала проверку последнего хэша, но я не считаю, что это требуется.


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

  1. git rm -r WebApplication/packages

было подтверждение git-dialog. Вы должны выбрать опцию" y".

  1. git commit -m "blabla"
  2. git push -f origin <ur_branch>