如何在Git中签出一个文件的特定版本?

如何在Git中签出一个文件的特定版本?,git,Git,如何在git中签出一个文件的特定版本 我发现,上面写着: $ git checkout HEAD~43 Makefile $ git reset Makefile 但是我不知道如何找到'HEAD~43',如果我做一个git日志文件,我怎么才能找到应该使用哪个'HEAD~43' 为什么我需要为该文件运行git reset?它做什么?您知道该文件属于什么提交(即:特定修订版)?然后做: git checkout <commit> <file> git签出 另一个命令:

如何在git中签出一个文件的特定版本

我发现,上面写着:

$ git checkout HEAD~43 Makefile
$ git reset Makefile
但是我不知道如何找到'HEAD~43',如果我做一个
git日志文件
,我怎么才能找到应该使用哪个'HEAD~43'

为什么我需要为该文件运行
git reset
?它做什么?

您知道该文件属于什么提交(即:特定修订版)?然后做:

git checkout <commit> <file>
git签出
另一个命令:

git checkout HEAD~N <file>
git签出头~N

用于当您想从某个范围返回文件的版本时(我这样做是为了怀旧)。

HEAD~43
指文件的提交(版本)。相反,您可以使用在文件上执行
git log
得到的提交散列。如果您只需要该文件,则不需要在其上运行
git reset
;只有当您想将文件转发到当前头时,才需要这样做。

HEAD~43
只是树状结构,因此您可以使用哈希或标记。必须使用
--
将treeish与文件名分开,否则它将被视为文件名。比如说

git checkout v0.45 -- filename
git checkout HEAD^ -- filename
git checkout 16bb1a4eeaa9 -- filename

“git reset”与“git checkout”完全相同。如果您的问题是关于HEAD~43语法(记录在git rev parse中),请询问这个问题,而不是您知道答案的无关问题。“HEAD~45是什么意思,以及如何找到文件的特定版本”根据和,“git reset”的作用与“git checkout”不完全相同:“git reset”在索引中从还原而不在工作树中触摸,而是“git checkout”更新“从”的索引,然后在“工作树”中更新。如果以下任何答案回答了您的问题,即堆栈溢出的工作方式,您可以通过单击旁边的复选标记来“接受”答案。但前提是你的问题得到了回答;如果没有,考虑在问题和/或评论中添加更多的细节,说什么还不清楚(可能)。