【问题标题】:How to checkout a file in git based on a tag如何根据标签在git中签出文件
【发布时间】:2015-07-05 18:48:19
【问题描述】:

我有一个提交哈希abcx,我给它一个标签100。 现在我想签出一个文件example.pl 到那个标签100。在 git 中可以吗?
我可以做git checkout abcs example.pl,但我直接想签出基于标签的文件

谁能帮我解决这个问题?

【问题讨论】:

  • 如果您有 2 个提交标记为“100”,它将如何工作?
  • 在这种情况下标签是唯一的
  • 哦,是的,抱歉,然后 git checkout tags/100 :) 来自:stackoverflow.com/questions/791959/…
  • 然后它会将整个 repo 签出到 100 。我只是想要一个文件签出到 100
  • git checkout tags/100 example.pl

标签: git tags


【解决方案1】:

由于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 log 使用本地存储库指针来记录文件的更改,因此它将知道在您签入文件状态之前发生的“未来”更改。所以从git角度来看命令:

git checkout <tag/hash/branch> file

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

【讨论】:

  • 那如何找到文件属于哪个标签?
猜你喜欢
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2022-09-27
  • 2010-11-07
相关资源
最近更新 更多