【发布时间】:2019-07-09 04:37:41
【问题描述】:
我在 Windows 上使用 git。
假设我想检查,而不是提交 fe4fd(缩写以使示例更短),而是专门从提交 fe4fd 文件 foo.html。
根据文档我应该可以使用
git checkout fe4fd foo.html
这应该可行。或者可能
git checkout fe4fd -- foo.html
因为破折号似乎是可选的。
无论如何。我在正确的目录中。
如果我执行git status foo.html 或git reflog foo.html 等,一切看起来都很正常,它知道文件在那里。
一切正常
我可以这样做:
git checkout fe4fd
效果很好
我可以这样做:
git checkout foo.html
但我做不到
git checkout fe4fd foo.html
因为每次我得到
错误:pathspec 'foo.html' 与 git 已知的任何文件都不匹配。
我试过了
- 从
C:/whatever到foo.html的完整路径 - 本地路径,如
./foo.html - 包括封闭文件夹,如
../myrepo/foo.html - 用单引号和双引号括起来
我错过了什么?
TIA。
更新:https://stackoverflow.com/users/6330106/elpiekay 让我得到了答案。 ElpieKay 如果您将您的评论作为答案发表,我会将其标记为正确。
答案是,在提交时,文件不在那个路径,因为在提交之后父文件夹已被重命名。 p>
我通过阅读 git log 的文档发现了这一点,并了解到除非您包含 --follow 标志,否则它不会通过路径更改来跟踪文件的历史记录。
我按照 ElpieKay 的建议做了,但该文件显然不是提交的一部分。这是错误的,因为我知道它是。但是我试图签出的文件是bar/foo.html,并且在我正在寻找的结账时该路径不存在。在结帐时,它是baz/foo.html。
为了证明这一点,我创建了一个新的 baz/ 文件夹,cd'd 并从提交中签出文件。这行得通。
【问题讨论】:
-
foo.html是否存在于fe4fd中?git ls-tree fe4fd -r -t foo.html可以打印任何东西吗?如果它什么都不打印,则该文件在fe4fd的树中不存在。 -
区分大小写:文件不是存储为“Foo.html”吗?
-
@LeGEC 好主意,但绝对不是案例问题。查看其他有效的命令。
-
@ElpieKay 我想你已经明白了。该特定的提交号没有显示任何内容,尽管该文件肯定在其中。文件夹已重命名,我似乎无法在重命名之前返回。我可以回到重命名,但不能更进一步。
标签: git git-bash git-checkout