我正在尝试运行此命令:
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>...]'
答案 0 :(得分:19)
这取决于您使用的外壳 在Windows上,例如使用msysgit,请参阅issue 477:
单引号与CMD没有特殊含义。不要指望他们有效 与POSIX shell相同。像这样调用filter-branch:
git filter-branch --commit-filter "GIT_COMMITTER_NAME=void GIT_AUTHOR_NAME=void GIT_COMMITTER_EMAIL=just.a.test@kernel.org GIT_AUTHOR_EMAIL=just.a.test@kernel.org; git commit-tree \"$@\"" HEAD
多行:
git filter-branch --commit-filter "GIT_COMMITTER_NAME=void \
GIT_AUTHOR_NAME=void \
GIT_COMMITTER_EMAIL=just.a.test@kernel.org \
GIT_AUTHOR_EMAIL=just.a.test@kernel.org; \
git commit-tree \"$@\"" HEAD
如“How to pass a programmatically generated list of files to git filter-branch
?”
各种
...-filters
的每个参数都需要是一个字符串。该字符串保存为shell变量。
因此请确保'git rm --cached --ignore-unmatch filename.js'
被视为您所在的shell中的字符串
由于Constantine Ketskalo指出in the comments:
Windows 10,PyCharm,GitPython,与问题相同的命令 只需在字符串中将
'
更改为"
,就可以了!