像这里提到的方法,Get list of new commits between two tags in Git?给出了diff文件的列表。
但是,我有一个约束,就像我不能每次签出一个标记一样,因为我需要在不同标记之间提供超过1000个请求/秒的diff文件。有什么方法可以实现这一点吗?
例如,我有3个标签:
现在假设文件one.txt更改了所有标记,并且head位于最新的标记(1.2)上。现在当我做了
git diff 1.0 1.1 --stat它返回我的文件名one.txt,所以现在我知道one.txt被更改了,我可以抓取该文件。但是,要在标签1.1上获得one.txt,我需要首先在1.1签出,否则我将得到最新的one.txt,所以这里我需要避免签出,并得到与1.1相同的one.txt。
有什么解决办法吗?
发布于 2014-06-21 08:37:12
解决方案1:git checkout
使用带有修订说明符(如分支、标记或提交sha )的git checkout以及文件路径,将该文件的修订签出到您的工作副本中:
git checkout <tag> -- <filepath>请注意,这只会修改该特定文件的版本。其余的工作副本将不会受到影响。
文档
来自git log (摘要):
git结账-p --补丁--… 当给出
<paths>或--patch时,git checkout做而不是交换分支。它从索引文件或命名的<tree-ish>(通常是提交)...The<tree-ish>参数中更新工作树中的命名路径,可用于指定特定的树-ish(即提交、标记或树),以便在更新工作树之前更新给定路径的索引。
解决方案2:git show
还可以使用git show检索文件的版本,并将结果输出到文件中:
git show <tag>:<filepath> > <outputPath>另请参阅
官方Linux内核文档:
https://stackoverflow.com/questions/24339484
复制相似问题