如何根据标签检出 git 中的文件

How to checkout a file in git based on a tag

我有一个提交散列 abcx 并且我给了它一个标签 100。 现在我想将文件 example.pl 检出到该标签 100。 git可以吗?
我可以git checkout abcs example.pl,但我想直接签出一个基于标签的文件。

谁能帮我解决这个问题?

由于 tags work in Git,它们基本上只是只读分支,您可以将其视为 Git 中的任何分支。您可以将它们命名为 tags/<tag>.

要使用标签将存储库的整个状态检出到工作目录,您可以这样写:

git checkout tags/<yourtag>

但是对于普通分支的情况,您可以通过列出单个文件来缩小对单个文件的检出范围:

git checkout tags/<yourtag> <file1> <file2> ...

您在日志中看到的行为是因为 Git 有两种指向存储库的方法。当您使用以下命令检出整个存储库时,您的本地存储库指针正在更改:

git checkout <tag/hash>

或者当您将文件签出到特定状态时,文件的个别状态会发生变化:

git checkout <tag/hash> filelist

即使您将所有文件检出到以前的存储库状态:

git checkout <tag/hash> *

您的本地存储库指针不会改变。 git 日志使用本地存储库指针来记录文件的更改,因此它将知道在您签入文件的状态之前发生的 "future" 更改。所以从git角度命令:

git checkout <tag/hash/branch> file

不影响存储库指针,它只是更改文件的状态以匹配特定的时间点,如果你将 运行 git 状态,你将看到这些文件为本地更改,它与从存储库中的文件状态复制粘贴没有任何区别。