Git日志说文件在那里但无法结账

时间:2013-04-16 15:21:22

标签: git

是否可以调用git log filepath并查看文件是否在提交中,但无法使用git checkout filepath将其检出?

错误:pathspec'filepath'与git已知的任何文件都不匹配。

我在同一棵工作树上。

编辑:添加了包含git log filepathgit diff sha1idgit checkout filepath的示例。

> git log 889e2e74-6ec3-448b-ad35-feb2187d9d2b

commit b2df50ecd14472a1c38d2cd2269898d4f3ab9604
Author: l
Date:   Tue Apr 16 15:20:39 2013 +0100

    Committed 889e2e74-6ec3-448b-ad35-feb2187d9d2b

commit dc9ee9433fd87c9031e7569ab451d2c02343e146
Author: l
Date:   Tue Apr 16 15:20:38 2013 +0100

    Committed 3f743855-ec1b-4e76-808a-eafc6042c47a

commit 79eed05ab387f0f6aec266df109d7cda26789c83
Author: f
Date:   Tue Apr 16 15:19:58 2013 +0100

    Committed 889e2e74-6ec3-448b-ad35-feb2187d9d2b

git diff dc9ee9
diff --git a/3f743855-ec1b-4e76-808a-eafc6042c47a b/3f743855-ec1b-4e76-808a-eafc6042c47a
index 612e91c..619ac4f 100644
Binary files a/3f743855-ec1b-4e76-808a-eafc6042c47a and b/3f743855-ec1b-4e76-808a-eafc6042c47a differ
diff --git a/889e2e74-6ec3-448b-ad35-feb2187d9d2b b/889e2e74-6ec3-448b-ad35-feb2187d9d2b
new file mode 100644
index 0000000..0ae16b3
Binary files /dev/null and b/889e2e74-6ec3-448b-ad35-feb2187d9d2b differ
diff --git a/a007422b-0b9d-4773-aba7-54b6dd2b4ceb b/a007422b-0b9d-4773-aba7-54b6dd2b4ceb
index 5df614e..831cb07 100644
Binary files a/a007422b-0b9d-4773-aba7-54b6dd2b4ceb and b/a007422b-0b9d-4773-aba7-54b6dd2b4ceb differ


git checkout dc9ee9 ./889e2e74-6ec3-448b-ad35-feb2187d9d2b
error: pathspec '889e2e74-6ec3-448b-ad35-feb2187d9d2b' did not match any file(s) known to git.

2 个答案:

答案 0 :(得分:2)

您只能使用checkout从当前提交中获取当前版本。如果当前提交中不存在该文件,则不会获得该文件。要查看该文件,请签出提交:

git checkout <sha1id>

您可以从git log获取sha1id。

如果您只需要该文件,并在当前工作树中替换它的版本,请使用

git checkout <sha1id> path

代替。

答案 1 :(得分:2)

git diff dc9ee9将提交内容与SHA-1 dc9ee9与您当前的工作目录进行比较。特定文件的差异结果:

diff --git a/889e2e74-6ec3-448b-ad35-feb2187d9d2b b/889e2e74-6ec3-448b-ad35-feb2187d9d2b
new file mode 100644
index 0000000..0ae16b3
Binary files /dev/null and b/889e2e74-6ec3-448b-ad35-feb2187d9d2b differ

表示该文件在commit dc9ee9中不存在,但它在您当前的工作目录中存在。因此,从该提交中检出该文件将失败。

实际上,从您的git log输出中看来,相关文件似乎是在 next 提交b2df50ecd14472a1c38d2cd2269898d4f3ab9604中提交的,因此代替git checkout dc9ee9 889e2e74-6ec3-448b-ad35-feb2187d9d2b ,您应该尝试这样做(还要注意--语法将提交与路径名分开:

git checkout b2df50 -- 889e2e74-6ec3-448b-ad35-feb2187d9d2b

另外,如果b2df50是您当前的HEAD,则可以改为执行此操作:

git reset --hard HEAD -- 889e2e74-6ec3-448b-ad35-feb2187d9d2b