如何在 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 在修订版 4,我想在修订版 2 中取回快照然后我输入:

cd doc; git checkout HEAD^2 file.txt

我得到了:

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

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
你应该

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

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

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

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

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

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

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

最新更新