我想找到包含给定合并的标记修订版。我发现this question关于在标记修订中查找提交,我没有将其付诸实践。
具体案例:查找包含matplotlib的this merge标记修订版。
我转到合并中包含的commits列表,我带第一个ID cf11aea
并输入
git tag --contains cf11aea
这不会返回任何结果。
当尝试使用上面问题中给出的脚本查看具有相同补丁ID的提交时,它会返回单个答案 - 原始提交。
那么如何使用给定的合并找到带标记的修订版本,这与使用给定提交查找带标记的修订版本有何不同?
(关于matplotlib本身的问题不。)
修改
可能确实有一种解释是合并不是任何标记修订的一部分。但是,此标记引入的修改可以在标记修订的源代码中看到。例如。来自cf11aea
的{{3}}可以在this modified line中看到。
答案 0 :(得分:3)
要回答主要问题,您如何找到包含给定提交的所有代码?
正如你所尝试的那样:
git tag --contains COMMIT-ID
如果此命令的输出为空,则无标记包含指定的提交。
所以我会说你的命令正确,但示例或存储库错误。
让我们分析。
您正在寻找包含特定提交的所有代码,在您的示例中,您正在matplotlib中的所有代码中查找提交cf11aea
。
但是,该存储库中没有标记包含该提交。
这就是原因。
您引用拉取请求,请求#5718,并且该存储库中实际上有两个提交引用此拉取请求:
commit 5b74696f838a43bcedc4bc568f0564f87f2fc71a
Merge: 18169b295 c9b2425fa
Author: Thomas A Caswell <tcaswell@gmail.com>
Date: Wed Feb 17 21:35:50 2016 -0500
Merge pull request #5718 from mdboom/image-interpolation
Rewrite of image infrastructure
commit 659513951920d83fe6ef68ec40dd72f7bd6d6653
Author: Thomas A Caswell <tcaswell@gmail.com>
Date: Wed Feb 17 21:35:50 2016 -0500
Merge pull request #5718 from mdboom/image-interpolation
Rewrite of image infrastructure
Conflicts:
lib/matplotlib/tests/test_axes.py
- do not back-port appveyor spceific limits
lib/matplotlib/tests/test_image.py
- do not backport the jpeg_alpha test
setupext.py
- do not include windows/appveyor related changes
看看这两个中的前2-3行:
commit 5b74696f838a43bcedc4bc568f0564f87f2fc71a
Merge: 18169b295 c9b2425fa
Author: Thomas A Caswell <tcaswell@gmail.com>
commit 659513951920d83fe6ef68ec40dd72f7bd6d6653
Author: Thomas A Caswell <tcaswell@gmail.com>
如您所见,第一个是合并,另一个不合并。另一个很可能是第一个的樱桃选择。
让我们看看哪些标签包含这些提交:
λ git tag --contains 5b74696f838a43bcedc4bc568f0564f87f2fc71a
λ git tag --contains 659513951920d83fe6ef68ec40dd72f7bd6d6653
v2.0.0
v2.0.0b1
v2.0.0b2
v2.0.0b3
v2.0.0b4
v2.0.0rc1
v2.0.0rc2
v2.0.1
v2.0.2
所以pull请求的原始合并不是任何标签的一部分,而樱桃挑选的提交是(在重新阅读时我假设它实际上是壁球或类似的东西)。
这就是为什么您要查找的提交cf11aea不属于任何标记。
总之,你的前提是错误的。您使用git tag --contains cf11aea
的空输出表明您做错了,但是您使用了正确的命令,只是假设cf11aea
是标记错误的一部分。
要在评论中回答您的问题,我是如何找到其他提交的?好吧,有两种方法,但让我们先处理那条让我走上正轨的方式:
我检查了标记v2.0.0
,然后执行了:
git blame extern\agg24-svn\include\agg_span_image_filter_gray.h
此输出中的第493行(+周围的行)如下所示:
121ee67b4d agg24/include/agg_span_image_filter_gray.h (Michael Droettboom 2007-11-16 15:53:57 +0000 490) fg_ptr = (const value_type*)base_type::source().next_y();
121ee67b4d agg24/include/agg_span_image_filter_gray.h (Michael Droettboom 2007-11-16 15:53:57 +0000 491) }
121ee67b4d agg24/include/agg_span_image_filter_gray.h (Michael Droettboom 2007-11-16 15:53:57 +0000 492)
6595139519 extern/agg24-svn/include/agg_span_image_filter_gray.h (Thomas A Caswell 2016-02-17 21:35:50 -0500 493) fg = color_type::downshift(fg, image_filter_shift);
121ee67b4d agg24/include/agg_span_image_filter_gray.h (Michael Droettboom 2007-11-16 15:53:57 +0000 494) if(fg < 0) fg = 0;
2a178393c0 extern/agg24/include/agg_span_image_filter_gray.h (Michael Droettboom 2014-10-15 10:35:38 -0400 495) if(fg > color_type::full_value()) fg = color_type::full_value();
121ee67b4d agg24/include/agg_span_image_filter_gray.h (Michael Droettboom 2007-11-16 15:53:57 +0000 496) span->v = (value_type)fg;
(为清楚起见,我将第493行与其余部分分开)
第一部分是引入更改的提交ID。
然后我看了那个提交,你可以看到上面的输出,发现它不是合并提交。显然,这不是该拉取请求的合并。此时我做到了这一点:
git log --graph >c:\log.txt
在Notepad ++中打开并使用“查找”功能查找5718,找到两个提交,其余的是历史记录。
答案 1 :(得分:1)
除了what Lasse wrote in his answer之外,这里只有一个GitHub解决方案可以获得相同的结果:
您应该寻找的内容on the pull request是有关拉取请求解决方案的信息。在这种情况下,它看起来像这样:
所以在这里,tacaswell使用合并提交master
将其合并到5b74696
。点击提交哈希会转到commit detail page,它会显示以下信息:
在提交页面上,GitHub将列出此提交所属的分支和标记。在这种情况下,您可以看到master
,这意味着此提交是master
分支的一部分。此处未列出任何标记,因此此合并提交不是标记的一部分。
回顾拉动请求,tacaswell还评论了以下内容:
因此,他决定使用提交2.x
将此拉取请求的内容反向移植到6595139
开发行。单击该哈希将再次引导至the commit detail page,如下所示:
同样,在底部,我们看到此提交所属的分支和标记。在这种情况下,它再次包含在master
分支中,但它也在某些分支上,粗体v2.0.2
是最新的分支,v2.0.0b1
是最早的分支。如果单击省略号,则会获得此提交所在的所有标记的列表:
如果你在GitHub网页界面上反复查看你所获得的信息,那就是Lasse发现的本地Git方式,你可以看到它完全匹配。因此,如果您正在处理GitHub项目并提取请求,您也可以尝试首先在GitHub上查找信息。