如何在git中签出移动的文件?
是否有可能签出已在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
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
(这是签出
将放置它的位置)。