在历史记录中查找具有给定合并的标记修订

时间:2017-07-24 08:01:39

标签: git

我想找到包含给定合并的标记修订版。我发现this question关于在标记修订中查找提交,我没有将其付诸实践。

具体案例:查找包含matplotlibthis merge标记修订版。

我转到合并中包含的commits列表,我带第一个ID cf11aea并输入

git tag --contains cf11aea

这不会返回任何结果。

当尝试使用上面问题中给出的脚本查看具有相同补丁ID的提交时,它会返回单个答案 - 原始提交。

那么如何使用给定的合并找到带标记的修订版本,这与使用给定提交查找带标记的修订版本有何不同?

关于matplotlib本身的问题

修改

可能确实有一种解释是合并不是任何标记修订的一部分。但是,此标记引入的修改可以在标记修订的源代码中看到。例如。来自cf11aea的{​​{3}}可以在this modified line中看到。

2 个答案:

答案 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是有关拉取请求解决方案的信息。在这种情况下,它看起来像这样:

Pull request resolution: Merge commit

所以在这里,tacaswell使用合并提交master将其合并到5b74696。点击提交哈希会转到commit detail page,它会显示以下信息:

Commit details with branch listing

在提交页面上,GitHub将列出此提交所属的分支和标记。在这种情况下,您可以看到master,这意味着此提交是master分支的一部分。此处未列出任何标记,因此此合并提交不是标记的一部分。

回顾拉动请求,tacaswell还评论了以下内容:

Backport notice

因此,他决定使用提交2.x将此拉取请求的内容反向移植到6595139开发行。单击该哈希将再次引导至the commit detail page,如下所示:

Commit details with branch/tag listing

同样,在底部,我们看到此提交所属的分支和标记。在这种情况下,它再次包含在master分支中,但它也在某些分支上,粗体v2.0.2是最新的分支,v2.0.0b1是最早的分支。如果单击省略号,则会获得此提交所在的所有标记的列表:

List of all branches and tags

如果你在GitHub网页界面上反复查看你所获得的信息,那就是Lasse发现的本地Git方式,你可以看到它完全匹配。因此,如果您正在处理GitHub项目并提取请求,您也可以尝试首先在GitHub上查找信息。