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

时间:2015-02-27 10:30:17

标签: git merge pull-request

我们正在使用git-flow风格的工作流程,我们希望找出哪个拉取请求包含对给定代码行的更改。

假设我们有以下历史:

       c---e---g
      /         \
-a---b---d---f---h--- master

我的拉取请求已在h合并了提交消息"合并拉取请求#123"。

如果我对拉取请求中添加的代码行负责,它会向我显示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不同,因为我从代码行开始,而不是提交。)

1 个答案:

答案 0 :(得分:2)

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

对于没有冲突的正常合并, h 永远不会出现在git blame中,因为它在任何代码行中都没有改变,只是合并了 g f < / em>的

所以你想要的可以分两个阶段实现

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

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

  2. 在步骤1中找到提交后查找第一个合并提交 因此,您必须首先找到哪个提交会影响您感兴趣的代码行。这可以通过Find merge commit which include a specific commit

  3. 中的答案来实现。