如何在Git中基于标签检出文件

24

我有一个提交哈希 abcx,并给它打了标签 100。 现在我想要在git中将文件 example.pl 检出到该标签 100。是否可能?
我可以执行 git checkout abcs example.pl,但我直接想要基于标签检出文件

请问是否有人能帮忙解决这个问题?


如果您有两个标记为“100”的提交,它将如何工作? - cerkiewny
哦,是的,抱歉,那么执行 git checkout tags/100 :) 从: https://dev59.com/lnRA5IYBdhLWcg3w4iF_ - cerkiewny
然后它会将整个存储库检出到100。我只想要一个文件检出到100。 - Newbie
git checkout tags/100 example.pl请检出标签/100示例.pl。 - cerkiewny
但是当我执行 git log example.pl 命令时,它会显示甚至超过100个版本。 - Newbie
显示剩余3条评论
1个回答

33
因为在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日志使用本地存储库指针记录文件上的更改,因此它将知道您检查文件状态之前发生的“未来”更改。因此,从Git的角度来看,命令:

git checkout <tag/hash/branch> file

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

那么我该如何找到文件属于哪个标签? - Newbie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接