查找修改了给定行的合并提交?

6
我们正在使用 git-flow 风格的工作流程,并且我们想要找出哪个拉取请求包含了对给定代码行的更改。
假设我们有以下历史记录:
       c---e---g
      /         \
-a---b---d---f---h--- master

我的拉取请求已合并到提交信息为“Merge pull request #123”的h中。
如果我在拉取请求中添加的代码行上执行git blame,则显示e而不是h
12345678 (Wilfred Hughes           2015-02-02 15:22:40 +0000 402) # Some old code
e        (Wilfred Hughes           2015-02-12 15:22:40 +0000 402) # Added in the PR, line 1
e        (Wilfred Hughes           2015-02-12 15:22:40 +0000 403) # Added in the PR, line 2
56789012 (Wilfred Hughes           2015-02-26 17:24:18 +0000 404) # More old code

如何在git中找到给定代码行的合并提交?
(请注意,这与this related question不同,因为我从代码行开始,而不是提交。)

你尝试过使用 git log --reverse --merges --topo-order <commit-e>.. 命令吗?第一个条目应该对应提交 h - jub0bs
1
你可以参考以下问题:https://dev59.com/q2oy5IYBdhLWcg3wkOsK,该问题是关于如何查找特定提交后的合并情况。 - Chris Maes
1个回答

3

如果您在合并提交中解决了冲突,那么合并提交才会出现在git-blame中。

对于没有冲突的普通合并,h永远不会出现在git blame中,因为它没有在任何代码行中进行更改,仅仅合并了gf

所以您想要的可以通过2个阶段来实现

  1. 首先找到影响您感兴趣的代码行的提交。这可以通过git blame -L选项(在git 1.8.4中提供)实现。给定10+行的范围,因为确切的行号可能已经更改。

    $ git blame -L200,+10 -- filename.ext

  2. 找到第一个合并提交,该提交紧随步骤1中找到的提交。 因此,您必须首先找到影响您感兴趣的代码行的提交。这可以按照查找包含特定提交的合并提交中的回答来实现。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接