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

Wil*_*hes 6 git merge pull-request

我们正在使用git-flow样式工作流,我们想要找出哪个pull请求包含对给定代码行的更改.

假设我们有以下历史:

       c---e---g
      /         \
-a---b---d---f---h--- master
Run Code Online (Sandbox Code Playgroud)

我的pull请求h与提交消息"Merge pull request#123"合并.

如果我对拉取请求中添加的代码行做了一个git责备,它会告诉我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
Run Code Online (Sandbox Code Playgroud)

如何在git中找到给定代码行的合并提交?

(注意这与此相关问题不同,因为我从代码行开始,而不是提交).

raj*_*air 3

如果您解决了该提交中的冲突,则合并提交只会出现在 git-blame 中。

对于没有冲突的正常合并,h永远不会出现在 gitblame 中,因为它在任何代码行中都没有改变,只是合并了gf

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

  1. 首先找到您感兴趣的受哪个提交影响的代码行。这可以通过 gitblame -L 选项(来自 git 1.8.4)来实现。给出 10 行以上的范围,因为确切的行号可能已更改。

    $ git Blame -L200,+10 -- 文件名.ext

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