假设主分支中的某个特定文件具有以下内容:
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 是通过回购分支的分支提出的,这将如何工作。
您可以检查分析器运行的代码之间的差异(简单的常规差异)——如果我理解正确的话:
master
,合并分支后——和您想要注释的代码——分支上的代码合并之前。
这句绕口令说:勾选
git diff <merge_commit> <merge_commit>^2
(或git diff master my_branch_before_merge
)
该差异将告诉您如何移动行索引以将它们映射到分支的代码。