如何在Git中的两个标签之间提取不同的文件版本?

时间:2014-06-21 07:37:26

标签: git

此处提到的方法Get list of new commits between two tags in Git?为我提供了差异文件列表。

但是,我有一个约束,就像我每次都不能检查标签一样,因为我需要提供超过1000个请求/秒,在不同标签之间询问diff文件。有没有可用的方法来实现这个目标?

例如,我有3个标签:

  • 1.0
  • 1.1
  • 1.2

现在假设所有标签中的文件one.txt发生变化,而head位于最新标签(1.2)上。现在我做的时候

git diff 1.0 1.1 --stat

它返回我的文件名one.txt所以现在我知道one.txt已更改,我可以抓取该文件。但是,要在代码1.1上获取one.txt,我需要先在1.1处结帐,否则我会收到最新的one.txt,因此我需要避免该结帐并获取one.txt是1.1。

请建议任何解决方案?

1 个答案:

答案 0 :(得分:3)

解决方案1:git checkout

git checkout与分支,标记或提交sha等修订说明符一起使用,以及文件路径,将该文件的修订版本签出到您的工作副本中:

git checkout <tag> -- <filepath>

请注意,这只会修改该特定文件的版本。其余的工作副本不会受到影响。

文档

来自official Linux Kernel documentation for git log(摘要):

git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>…
     

<paths>--patch被提供时,git checkout切换分支。它从索引文件或命名的<tree-ish>(通常是提交)更新工作树中的命名路径... <tree-ish>参数可用于指定特定的树(即提交,标记或树)在更新工作树之前更新给定路径的索引。

解决方案2:git show

您还可以使用git show检索文件的版本并将结果输出到文件:

git show <tag>:<filepath> > <outputPath>

另见

官方Linux内核文档: