合并缺少提交的分支后获取更改行的确切行号

问题描述 投票:0回答:1

假设主分支中的某个特定文件具有以下内容:

public class Test {
    public static void main(String[] args)
    {
        int sum = 0;
        for (int i=0; i<10; i++)
        {
            sum += i;
        }
    }
}

现在我从主分支中分出一个功能分支,添加一些更改并提出 PR 将其合并到主分支。添加更改的差异。

diff --git a/Test.java b/Test.java
index fb3a6d4..5379684 100644
--- a/Test.java
+++ b/Test.java
@@ -5,6 +5,7 @@ public class Test {
         for (int i=0; i<10; i++)
         {
             sum += i;
+            log.info("Sum: {}", sum);
         }
     }
 }

现在,在我将功能分支提交到主分支之前,其他人在主分支上添加了影响同一文件的另一个提交。所以主分支上的文件内容现在是:

public class Test {
    public static void main(String[] args)
    {
        int sum = 0;
        log.info("Calculating sum");        // This is the new line added to main by someone else
        for (int i=0; i<10; i++)
        {
            sum += i;
        }
    }
}

在我的 github PR diff 中,会显示该 PR 中添加了第 8 行(请参考上面分享的 git diff)。但我有兴趣知道这个更改合并到 master 时的行号是多少,在本例中为 9,因为其他人的提交在我的更改上方添加了一个新行。

使用案例:

我正在使用一个提供 PR 代码分析的工具,但它在特定行上报告的问题包含在基本分支上执行合并后的行号(在我们的示例中为第 9 行)。

我想将此特定行问题发布为 github PR 上的评论,但它失败了,因为它期望执行合并之前的更改行号(在我们的示例中为第 8 行)。

注意,为了简单起见,我添加了一行更改示例。在实际使用案例中,更改的行数可能会很大。

除了将主干的最新更改拉入我的功能分支之外,我想不出任何解决方案,但这在我的用例中是不可能的。有没有一种方法可以将行号从与最新 main 合并到与旧版本 main 合并的行号

我正在用 python 编写此内容,并使用 unidiff 来解析 git diff 并从中理解它。

更新:

我已经想到了以下方法:

  • 取出存储库的本地签出。
  • 对于我的分支中的每个更改的文件,在行的开头/结尾处附加行号。
  • 本地执行压缩并合并到主分支。
  • 解析由于此合并操作而导致的提交的差异。现在,差异中的行可以映射到在行内容的开头/结尾处编码的旧行。

但这看起来更像是一种幼稚的做事方式。寻找一些更好的方法来解决这个问题。另外,我不确定如果 PR 是通过回购分支的分支提出的,这将如何工作。

python git github git-merge
1个回答
0
投票

您可以检查分析器运行的代码之间的差异(简单的常规差异)——如果我理解正确的话:

master
,合并分支后——和您想要注释的代码——分支上的代码合并之前。

这句绕口令说:勾选

git diff <merge_commit> <merge_commit>^2
(或
git diff master my_branch_before_merge

该差异将告诉您如何移动行索引以将它们映射到分支的代码。

© www.soinside.com 2019 - 2024. All rights reserved.