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

New*_*bie 12 tags git

我有一个提交哈希abcx,我给它一个标签100.现在我想将文件签出example.pl到该标签100.在git中有可能吗?
我能做到git checkout abcs example.pl,但我直接想要abcx.

有人可以帮我这个吗?

cer*_*wny 14

由于标签在Git中的工作方式,它们基本上只是只读分支,您可以将其视为Git中的任何分支.你可以解决它们tags/<tag>.

要使用标记检查存储库的整个状态到工作目录,请编写:

git checkout tags/<yourtag>
Run Code Online (Sandbox Code Playgroud)

但是,与普通分支的情况一样,您可以通过列出它们来将结账范围缩小到单个文件:

git checkout tags/<yourtag> <file1> <file2> ...
Run Code Online (Sandbox Code Playgroud)

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

git checkout <tag/hash>
Run Code Online (Sandbox Code Playgroud)

当您通过以下方式检查特定状态时,文件或个别文件的状态会发生变化:

git checkout <tag/hash> filelist
Run Code Online (Sandbox Code Playgroud)

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

git checkout <tag/hash> *
Run Code Online (Sandbox Code Playgroud)

你的本地存储库指针不会改变.git日志使用本地存储库指针记录文件上的更改,以便它知道在您检入文件的状态之前发生的"未来"更改.所以从git perspective命令:

git checkout <tag/hash/branch> file
Run Code Online (Sandbox Code Playgroud)

不会影响存储库指针,它只是更改文件的状态以匹配特定的时间点,如果您将运行git状态,您将看到这些文件作为本地更改,它没有任何不同于采取来自存储库中文件状态的复制粘贴.