error: pathspec '...' did not match any file(s) known to git

error: pathspec '...' did not match any file(s) known to git

我打电话给 git checkout HEAD~2 "Finished 1 stage"(或者只是 git checkout "Finished 1 stage"

然后我得到error: pathspec 'Finished 1 stage' did not match any file(s) known to git

git日志:git log

我正在尝试从提交“已完成 1 阶段”中获取文件

希望大家多多帮助!

当你说

git checkout HEAD~2 

然后你签出到 HEAD 后面的 2 个提交,它是分支的头。您可能只需要上面的命令。

您的错误消息表明“完成的第 1 个阶段”是一个不存在的文件。显然这是一条提交消息,它被不必要地传递并且 git 解释

git checkout HEAD~2 "Finished 1 stage"

作为

checkout to HEAD~2, but only for the file called "Finished 1 stage"

I'm trying to get files from commit "Finished 1 stage"

在 Git 中,提交是 编号的 ,作为一个又大又丑的 hexadecimal 数字。 git checkoutgit restore 实际上 需要 这里是提交的 编号 。所以在原始级别你可以写:

git checkout a123456

这意味着切换到那个(整个)提交(作为“分离的 HEAD”);然后,您的工作树将包含来自该提交的文件,以及 Git 未触及的任何未跟踪文件,这些文件从之前保留在原处。1

如果您只想要来自该特定提交的一些特定文件,最好的——也是最安全的——表达方式是:

git checkout a123456 -- path/to/file1.ext name/of/file2.ext

例如。请注意,此请求意味着 销毁我在这两个文件中的任何未保存的工作 和 Git 将在不询问的情况下执行此操作。这里的两个破折号 -- 提交说明符 a123456 与两个路径名分开。如果您 省略 两个破折号,Git 会假设它们, 只要文件名不类似于选项说明符或类似的 。例如,假设您要获取名为 -b 的文件。名称 -b 也看起来像 选项 -b。这两个破折号帮助 Git 确保某些东西 一个选项(如果它在 -- 的左侧)或者 不是 一个选项(如果它在 -- 的右侧)。

现在,那些丑陋的大哈希 ID 很难输入。您可以使用 git log 找到您想要的提交,然后使用鼠标剪切并粘贴哈希 ID。但这仍然不是很漂亮。有时使用丑陋的大哈希 ID 或什至像 a123456 这样的缩写 ID 以外的东西可能会更好。您使用 HEAD~2 是一种避免输入哈希 ID 的方法。

如果 HEAD~2 names 提交——它可能会提交——那么 HEAD~2 就是 你所需要的 并且是 您应该输入的所有内容。提交的主题文本,例如“已完成 1 阶段”,不应在此处包含

要查看来自 HEAD~2 的哈希 ID,您可以 运行 git rev-parse。除了说明 git checkout 如何将字符串 HEAD~2 转换为哈希 ID 之外,这个命令并没有那么有趣:

$ git rev-parse HEAD~2
7652ce966f9b398e02a5df0344d015c4d54ca52a

(您的结果会有所不同)。为了更好地查看提交,请考虑使用 git show:

$ git show HEAD~2

(此处不包括输出)。

种使用日志消息搜索提交的方法。这些在 the gitrevisions documentation 中有描述,值得随着时间的推移反复阅读。但是如果 HEAD~2 就足够了,你可能应该只使用它。


1对于您已修改但尚未提交的文件有一种特殊情况。有关详细信息,请参阅 Checkout another branch when there are uncommitted changes on the current branch