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

如何在git中签出移动的文件?,git,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上,我想在revision 2上获取快照 然后我键入: cd doc; git checkout HEAD^2 file.txt 我得到: e

是否有可能签出已在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上,我想在revision 2上获取快照 然后我键入:

cd doc; git checkout HEAD^2 file.txt
我得到:

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

你应该使用
HEAD~2
,而不是
HEAD^2
——它适合我

语法
HEAD^2
仅在HEAD是merge commit时才相关,并且表示获得第二个父级提交(不常见!)


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

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

语法
HEAD^2
仅在HEAD是merge commit时才相关,并且表示获得第二个父级提交(不常见!)


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

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

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

您还可以使用
git log
获取所需提交的哈希值。假设是3c142


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

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

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

您还可以使用
git log
获取所需提交的哈希值。假设是3c142


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

文件
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

此时不存在文件
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

您还需要使用该版本中的文件路径:在
cd doc
之后,
file.txt
在第1-3版中是
。/file.txt
,因此如果
HEAD
命名为第4版,
HEAD~2:file.txt
就是所讨论的文件。与
doc
相关的路径是
./file.txt
(这是
签出
将要放置它的地方)。您还需要使用该版本中文件的路径:在
cd doc
之后,
file.txt
在第1-3版中是
./file.txt
,因此如果
HEAD
命名为第4版,
HEAD~2:file.txt
就是所讨论的文件。相对于
doc
的路径是
./file.txt
(这是
签出
将放置它的位置)。