我有一个提交哈希abcx
,我已经给它一个标记100
。
现在,我想将文件example.pl
结帐到该代码100
。是不是可能在git?
我可以git checkout abcs example.pl
,但我直接想要checkout a file based on the tag
。
有人可以帮我这个吗?
答案 0 :(得分:11)
由于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日志使用本地存储库指针来记录文件上的更改,以便它知道&#34; future&#34;在您检入文件的状态之前发生的更改。所以从git perspective命令:
git checkout <tag/hash/branch> file
不影响存储库指针,它只是改变文件的状态以匹配特定的时间点,如果你将运行git状态,你会看到这些文件是本地更改,它没有什么不同以任何方式从存储库中的文件状态获取复制粘贴。