1

是否有可能检出已在 git 中移动的文件的先前版本?

例如:

revison 1:  file.txt(new file)
revison 2:  file.txt(modify)
revison 3:  file.txt(modify)
revison 4:  move file.txt to doc/file.txt

现在 master 处于修订版 4,我想取回修订版 2 的快照,然后输入:

cd doc; git checkout HEAD^2 file.txt

我有:

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

3 回答 3

1

该文件doc/file.txt此时不存在,HEAD^2意味着第二个父级,而不是父级的父级,所以你想要这样的东西:

git checkout HEAD~2 -- file.txt
git mv file.txt doc/file.txt

或者更简单:

git show HEAD~2:file.txt > doc/file.txt
于 2013-10-02T04:58:35.687 回答
0

你应该使用HEAD~2,而不是HEAD^2- 它对我有用。

仅当 HEAD 是合并提交时,语法HEAD^2才相关,并且意味着获得第二个父提交(不常见!)。

语法HEAD~2用于指定当前提交的父级的父级。

于 2013-10-02T02:48:36.937 回答
0

尝试git checkout HEAD^^^ file.txtgit checkout HEAD~2 file.txt

此外,尽可能尝试使用分支名称。如果您以后需要查看 reflog,这将有所帮助。

您还可以使用git log来获取您想要的提交的哈希值。假设它是 3c142。

然后你可以使用git checkout 3c142 file.txt

于 2013-10-02T02:51:22.997 回答