如何在git中签出移动的文件?

时间:2013-10-02 02:42:10

标签: git

是否有可能检查已在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是在revison 4,我想在修订版2中获取快照 然后我输入:

cd doc; git checkout HEAD^2 file.txt

我得到了:

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您应该使用HEAD~2,而不是HEAD^2 - 它适用于我。

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

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

答案 2 :(得分:0)

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

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

您还可以使用git log来获取所需提交的哈希值。让我们说它的3c142。

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