我想找到标记的修订,其中包括一个给定的合并。我在一个带标记的修订版中找到了关于查找提交的这个问题,但我没有将它付诸于实践。
具体案例:查找包含matplotlib的标记修订版,其中包含此合并。
我转到合并中包含的提交列表中,我使用id cf11aea的第一个列表并键入
git tag --contains cf11aea这不会返回任何结果。
当尝试使用上面问题中给出的脚本使用相同的补丁id进行提交时,它返回一个单一的答案--原始提交。
那么,如何使用给定的合并找到标记的修订,这与使用给定的提交查找标记的修订不同吗?
(这个问题是关于matplotlib本身的而不是。)
编辑
一种解释可能是合并并不是任何有标记的修订的一部分。但是,这种合并带来的修改可以在标记的修订源中看到。在这条改良线中可以看到来自cf11aea的v2.0.0的来源。
发布于 2017-07-24 11:52:58
要回答您的主问题,如何找到包含给定提交的所有标记?
就像你试过的那样:
git tag --contains COMMIT-ID如果此命令的输出为空,则no标记包含指定的提交。
因此,我会说,您的命令是正确的,但是示例或存储库是错误的。
我们来分析一下。
您正在查找包含特定提交的所有标记,在您的示例中,您将在cf11aea中的所有标记中查找提交matplotlib。
但是,存储库中的任何标记都不包含提交。
这就是为什么。
您引用了一个拉请求,即拉请求#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因此,最初的合并,拉请求,不是任何标签的一部分,而樱桃挑选提交是(在重新阅读,我假设它实际上是一个壁球或类似的东西)。
这就是为什么您要寻找的提交( 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++中打开它并使用" find“函数查找5718,找到两个提交,其余都是历史。
发布于 2017-07-24 12:33:52
除了拉塞在他的回答中写了什么之外,这里还有一个仅针对GitHub的解决方案,以获得相同的结果:
您应该寻找的关于拉的请求是关于拉请求解析的信息。在本例中,如下所示:

因此,在这里,tacaswell将其与合并提交5b74696合并到5b74696中。单击提交哈希,您将看到提交详细信息页,它将向您显示以下信息:

在提交页面上,GitHub将列出此提交的分支和标记。在本例中,您可以在那里看到master,这意味着此提交是master分支的一部分。这里没有列出标记,因此合并提交不是标记的一部分。
回首“拉”请求,塔卡斯韦还评论了以下几点:

因此,他决定将这个拉请求的内容移植到2.x开发行中,使用提交6595139。单击该哈希将再次引导您进入提交详细信息页,它如下所示:

同样,在底部我们看到这个提交是其一部分的分支和标记。在本例中,它再次包含在master分支中,但它也包含在一些分支上,粗体的v2.0.2是最近的分支,v2.0.0b1是最早的分支。如果单击省略号,将得到此提交所使用的所有标记的列表:

如果您交叉检查您从GitHub网络界面获得的信息与Lasse发现的本地Git方式,您可以看到它完全匹配。因此,如果您正在处理一个GitHub项目,并且无论如何都要拉请求,那么您也可以尝试首先查找有关GitHub的信息。
https://stackoverflow.com/questions/45275169
复制相似问题