Удаление конфиденциальных данных из Git. "фатальный: неоднозначный аргумент" rm "

Я пытаюсь запустить эту команду:

git filter-branch --force --index-filter 'git rm --cached --ignore-unmatch filename.js' --prune-empty --tag-name-filter cat -- --all

но я продолжаю получать эту ошибку:

fatal: ambiguous argument 'rm': unknown revision or path not in the working tree
.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'

Ответ 1

Это зависит от используемой оболочки.
В Windows, например, с msysgit, см. проблема 477:

Одиночные кавычки не имеют особого значения с CMD. Не ожидайте, что они так же, как с оболочкой POSIX. Вызовите фильтр-ветвь следующим образом:

git filter-branch --commit-filter "GIT_COMMITTER_NAME=void GIT_AUTHOR_NAME=void [email protected] [email protected]; git commit-tree \"[email protected]\"" HEAD

Несколько строк:

git filter-branch --commit-filter "GIT_COMMITTER_NAME=void \
                                   GIT_AUTHOR_NAME=void \
                                   [email protected] \
                                   [email protected]; \
                                   git commit-tree \"[email protected]\"" HEAD

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

Каждый аргумент для различных ...-filters должен быть одной строкой. Эта строка сохраняется как переменная оболочки.

Поэтому убедитесь, что 'git rm --cached --ignore-unmatch filename.js' считается строкой в ​​оболочке, в которой вы находитесь.