"git checkout -- *" returns "error: pathspec did not match any files known to git"
"git checkout -- *" returns "error: pathspec did not match any files known to git"
如前所述,如果我想放弃工作目录中的更改,我 运行 命令 git checkout -- *
但 git returns 信息 error: pathspec 'databaseName.tmp' did not match any file(s) known to git.
。我不是git高手,不知道怎么解决。有什么想法吗?
作为 genisage ,您明确要求 git 签出文件 databaseName.tmp
,就好像您输入了:
git checkout -- databaseName.tmp
这是因为在 git 有机会看到您的命令之前,您输入的 *
由 shell 处理。 shell 将 *
替换为当前工作目录中的所有文件名,1 然后完成后,然后 运行 git
,但没有任何迹象表明您输入的实际命令中包含 *
,而不是所有这些名称。
同样,git 不知道您使用了星号 *
字符,它看到的只是一个文件名列表,包括 未存储在 git.
中的任何顶级忽略文件
令人困惑的是,如果您设法2 将文字星号 *
传递给 git,git 将扩展 *
,但 具有一组不同的文件名: git 已知的文件名。那会做你想要的。
不过,有一个更简单的方法:git 将递归地检出目录,方法是检出它在 目录中知道的所有文件 。因此,不使用 *
,只需使用 .
请求 git 检出当前目录:
git checkout -- .
如果 git 知道 ./a
和 ./b
但不知道 ./databaseName.tmp
,这将检查 ./a
和 ./b
而不会尝试用 ./databaseName.tmp
.3
做任何事情
1更准确地说,文件名不以前导点开头的文件 .
。
2其实也很容易管理,例如,只需在星号前插入一个反斜杠\
:git checkout -- \*
。或者,使用单引号或双引号,它们都可以防止 shell 通配。单引号也抑制 shell 变量扩展,而双引号允许变量扩展但抑制通配。
3值得指出这里的细微差别:*
扩展为不以 .
开头的文件名,而询问 git 检出 .
会导致它检出目录中的所有文件, 包括 名称以 .
开头的文件。因此,git checkout -- \*
和 git checkout -- *
都将 而不是 撤消对名为 .secret
的文件的更改,例如,而 git checkout -- .
将撤消此类更改。
如前所述,如果我想放弃工作目录中的更改,我 运行 命令 git checkout -- *
但 git returns 信息 error: pathspec 'databaseName.tmp' did not match any file(s) known to git.
。我不是git高手,不知道怎么解决。有什么想法吗?
作为 genisage databaseName.tmp
,就好像您输入了:
git checkout -- databaseName.tmp
这是因为在 git 有机会看到您的命令之前,您输入的 *
由 shell 处理。 shell 将 *
替换为当前工作目录中的所有文件名,1 然后完成后,然后 运行 git
,但没有任何迹象表明您输入的实际命令中包含 *
,而不是所有这些名称。
同样,git 不知道您使用了星号 *
字符,它看到的只是一个文件名列表,包括 未存储在 git.
令人困惑的是,如果您设法2 将文字星号 *
传递给 git,git 将扩展 *
,但 具有一组不同的文件名: git 已知的文件名。那会做你想要的。
不过,有一个更简单的方法:git 将递归地检出目录,方法是检出它在 目录中知道的所有文件 。因此,不使用 *
,只需使用 .
请求 git 检出当前目录:
git checkout -- .
如果 git 知道 ./a
和 ./b
但不知道 ./databaseName.tmp
,这将检查 ./a
和 ./b
而不会尝试用 ./databaseName.tmp
.3
1更准确地说,文件名不以前导点开头的文件 .
。
2其实也很容易管理,例如,只需在星号前插入一个反斜杠\
:git checkout -- \*
。或者,使用单引号或双引号,它们都可以防止 shell 通配。单引号也抑制 shell 变量扩展,而双引号允许变量扩展但抑制通配。
3值得指出这里的细微差别:*
扩展为不以 .
开头的文件名,而询问 git 检出 .
会导致它检出目录中的所有文件, 包括 名称以 .
开头的文件。因此,git checkout -- \*
和 git checkout -- *
都将 而不是 撤消对名为 .secret
的文件的更改,例如,而 git checkout -- .
将撤消此类更改。