Как использовать git filter-branch для удаления файла из моего репо?(«вам нужно запустить эту команду с верхнего уровня рабочего дерева») - PullRequest
0 голосов
/ 02 октября 2018

Согласно документации git , я могу удалить файл из своей истории репозитория следующим образом:

git filter-branch --tree-filter 'rm -rf filename' HEAD

Я попробовал это и получил эту ошибку:

You need to run this command from the toplevel of the working tree.

Итак, я попробовал это и получил ту же ошибку:

git filter-branch --index-filter 'rm -f  /dist/bikeMap.html' HEAD

После проверки нескольких вопросов stackoverflow, я также попытался

git filter-branch --index-filter 'rm -f  /dist/bikeMap.html' master..HEAD
git filter-branch --tree-filter 'rm -f  /dist/bikeMap.html' --all
git filter-branch --tree-filter 'rm -f  /dist/bikeMap.html' --  --all
git filter-branch --tree-filter 'rm -f  /dist/bikeMap.html' master

И т.д.Все выдают одну и ту же ошибку.

git status говорит

On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working tree clean

Моя версия git 2.11.0.

РЕДАКТИРОВАТЬ: Я также попытался:

git filter-branch --index-filter "git rm --cached --ignore-unmatch dist/bikeMap.html" HEAD
git filter-branch --index-filter "git rm --cached --ignore-unmatch dist/bikeMap.html" -- HEAD
git filter-branch -f --index-filter 'git rm --cached --quiet --force "dist/bikeMap.html"' --prune-empty -- HEAD
git filter-branch -f --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty -- HEAD
git filter-branch -f --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty -- master
git filter-branch -f --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty master
git filter-branch -f --index-filter 'git rm --cached --quiet --force /dist/bikeMap.html' --prune-empty master
git filter-branch -f --index-filter 'git rm --cached --quiet --force /dist/bikeMap.html' --prune-empty HEAD

Та же ошибка.

РЕДАКТИРОВАТЬ: прогресс!

git filter-branch --index-filter 'git rm --cached --quiet --force dist/bikeMap.html' --prune-empty

привело к ошибке

Rewrite 419e8702fd8a5fe9ddad59a0fd7ff008edffdeab (1/47) (0 seconds passed, remaining 0 predicted)    
fatal: pathspec 'dist/bikeMap.html' did not match any files
index filter failed: git rm --cached --quiet --force dist/bikeMap.html

, если я ls dist/bikeMap.html получу

dist/bikeMap.html

Итак, оно существует.

Как я могу использовать git filter-branch для удаления файла из нашего репо?

1 Ответ

0 голосов
/ 02 октября 2018

Чтобы использовать --tree-filter, измените команду rm с использования /dist/bikeMap.html на использование dist/bikeMap.html, т. Е. Удалите начальный слеш.

Чтобы использовать --index-filter, измените команду на git rm --cached --ignore-unmatch dist/bikeMap.html, т. Е. Используйте git rm с дополнительными параметрами (и удаляйте начальную косую черту).

(Фильтр индекса будет намного быстрее. Если вы просто хотите удалить один именованный файл из всех коммитов, которые имеют этотодин именованный файл, используйте индексный фильтр с git rm --cached --ignore-unmatch.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...