是什么导致了 fatal: bad revision 以及如何修复此 git 命令?
What is causing fatal: bad revision and how can I fix this git command?
我需要从 git 存储库的历史记录中完全删除一个文件夹及其所有文件,并且我需要忽略对该文件夹的任何未来更改。
使用 Git-Bash,我已经尝试过一个 filter-b运行ch 命令,其中嵌套了一个 git remove 命令。下面是我的命令。
git filter-branch --force --index-filter \ "git rm -rf --cached --ignore-
unmatch C:\Foldername" \--prune-empty --tag-name-filter cat -- --all
我希望从存储库的所有版本中删除该文件夹,但我收到了一条错误消息:
fatal: bad revision 'git rm -rf --cached --ignore-unmatch C:\Foldername'
然后我尝试了命令:
git rm -rf --cached --ignore-unmatch "C:\Foldername"
它自己工作。然而,这并没有完成从存储库的整个历史记录中删除文件夹的任务。
更新:
我只是运行命令删除“git之前的space。如下图。
git filter-branch --force --index-filter \ "git rm -rf --cached --ignore-
unmatch C:\Foldername" \--prune-empty --tag-name-filter cat -- --all
我现在收到这条消息:
fatal: C:Foldername: 'C:Foldername' is outside repository
index filter failed: git rm -rf --cached --ignore-unmatch C:\Foldername
rm: cannot remove 'C:/.git-rewrite': Directory not empty
你有很多奇怪的反斜杠,就好像你在原来的多行命令上使用了剪切和粘贴示例,如下所示:
echo I \
am a \
multi-line \
example
但在不删除反斜杠的情况下将其变成单行:
echo I \ am a \ multi-line \ example
尝试运行两者——一个有换行符,这样每个反斜杠是实际完整行的最后一个字符,另一个没有——然后比较输出:
$ echo I \
> am a \
> multi-line \
> example
I am a multi-line example
$ echo I \ am a \ multi-line \ example
I am a multi-line example
你能看出两个输出之间的区别吗?它与白色space有关,有时很难分辨。我有第二个我喜欢使用的技巧,基于 wc
命令在错误消息中打印其参数这一事实,每行一个:
$ wc I \ am a \ multi-line \ example
wc: I: No such file or directory
wc: ' am': No such file or directory
wc: a: No such file or directory
wc: ' multi-line': No such file or directory
wc: ' example': No such file or directory
0 0 0 total
请注意,wc
试图打开的文件被命名为 I
、' am'
——一个以 space 开头的文件名——等等。
在这种情况下,git filter-branch
认为它应该使用的 --index-filter
是 </code>,这是一个不会做太多的命令(但是实际上在这里有效)。然后 <em>next</em> 之后的东西是一个提交选择器,但它不能作为一个提交选择器。这就是你的错误来源。</p>
<p>在这种情况下,由于您<em>没有</em>使用多行,您应该只删除所有反斜杠。这会给您带来不同的问题,因为 <code>git rm -rf --cached
应该被赋予 相对 文件名,而不是完整路径名。
我需要从 git 存储库的历史记录中完全删除一个文件夹及其所有文件,并且我需要忽略对该文件夹的任何未来更改。
使用 Git-Bash,我已经尝试过一个 filter-b运行ch 命令,其中嵌套了一个 git remove 命令。下面是我的命令。
git filter-branch --force --index-filter \ "git rm -rf --cached --ignore-
unmatch C:\Foldername" \--prune-empty --tag-name-filter cat -- --all
我希望从存储库的所有版本中删除该文件夹,但我收到了一条错误消息:
fatal: bad revision 'git rm -rf --cached --ignore-unmatch C:\Foldername'
然后我尝试了命令:
git rm -rf --cached --ignore-unmatch "C:\Foldername"
它自己工作。然而,这并没有完成从存储库的整个历史记录中删除文件夹的任务。
更新: 我只是运行命令删除“git之前的space。如下图。
git filter-branch --force --index-filter \ "git rm -rf --cached --ignore-
unmatch C:\Foldername" \--prune-empty --tag-name-filter cat -- --all
我现在收到这条消息:
fatal: C:Foldername: 'C:Foldername' is outside repository
index filter failed: git rm -rf --cached --ignore-unmatch C:\Foldername
rm: cannot remove 'C:/.git-rewrite': Directory not empty
你有很多奇怪的反斜杠,就好像你在原来的多行命令上使用了剪切和粘贴示例,如下所示:
echo I \
am a \
multi-line \
example
但在不删除反斜杠的情况下将其变成单行:
echo I \ am a \ multi-line \ example
尝试运行两者——一个有换行符,这样每个反斜杠是实际完整行的最后一个字符,另一个没有——然后比较输出:
$ echo I \
> am a \
> multi-line \
> example
I am a multi-line example
$ echo I \ am a \ multi-line \ example
I am a multi-line example
你能看出两个输出之间的区别吗?它与白色space有关,有时很难分辨。我有第二个我喜欢使用的技巧,基于 wc
命令在错误消息中打印其参数这一事实,每行一个:
$ wc I \ am a \ multi-line \ example
wc: I: No such file or directory
wc: ' am': No such file or directory
wc: a: No such file or directory
wc: ' multi-line': No such file or directory
wc: ' example': No such file or directory
0 0 0 total
请注意,wc
试图打开的文件被命名为 I
、' am'
——一个以 space 开头的文件名——等等。
在这种情况下,git filter-branch
认为它应该使用的 --index-filter
是 </code>,这是一个不会做太多的命令(但是实际上在这里有效)。然后 <em>next</em> 之后的东西是一个提交选择器,但它不能作为一个提交选择器。这就是你的错误来源。</p>
<p>在这种情况下,由于您<em>没有</em>使用多行,您应该只删除所有反斜杠。这会给您带来不同的问题,因为 <code>git rm -rf --cached
应该被赋予 相对 文件名,而不是完整路径名。