2016-11-28 39 views
1

在某个文件中,我需要计算从一个提交到另一个提交的行的确切编号为修改为。如果我做了git log它表明我这样的事情,如何识别与git日志中的删除分开的行修改

10模块/ P2瞩目根/ pom.xml的2 2的pom.xml

4 4的pom.xml

1 0模块/分配/ pom.xml的

1 1的pom.xml

1 1的pom.xml

10 8的pom.xml

29 28个模块/ P2轮廓根/ pom.xml的175 4的pom.xml

高达

1 1的pom.xml第二行

可以很容易理解,但从那时起我们怎么知道他们只是修改或删除。 例如,

29 28个模块/ P2瞩目根/ pom.xml的175 4的pom.xml

我们怎么知道哪个是正确的,从

  1. 29新添加和28个单独的删除
  2. 28个修改和1个新增加

是否有任何选项可与git log一起使用或者有其他方法吗?在此先感谢

+2

Git的*不*的东西归类为“修改”。实际上,'git diff'只是提供*指令*:“如果你删除了这一行,并添加了这一行,你就会将旧文件更改为新文件。”如果您希望在这些指令的顶部添加其他语义,Git会将其留给您。也就是说,Git包含了一些贡献的程序,它们会尝试类似的工作,这可能对您有用,例如,https://github.com/git/git/tree/master/contrib/diff-highlight – torek

回答

2

这不能与git log实现,实现这一目标的唯一途径就是通过git diff,但它也它只能提供没有行增删,就没有办法准确地识别无线改性。这是因为gitunified view中输出的diff输出默认不在context view中。您可以从here了解统一视图,并从here了解上下文视图。

因此,如果我们在上下文表单中获得git diff的输出,添加,删除和修改的行可以很容易地识别为添加以“+”显示,删除以“ - ”和修改为“!” 。 为此,我们需要使用git difftool,下面的代码工作

git difftool -y -x "diff -c" <commit1> <commit2> 
0

我想你要找的是什么git diff

git diff --stat <old-commit> <new-commit> -- <filename> 

例如

$ git diff --stat a54873b a6addbd -- Foo.cpp 
Foo.cpp | 42 +++++++++++++++++++++++++++++++++++------- 
1 file changed, 35 insertions(+), 7 deletions(-) 
+0

这也只给出了补充只有删除,我们如何找到有多少行被精确地修改过 –

+0

检测行是否被“修改”是一个非常棘手的问题,因为您必须为被认为“修改”的内容定义一个阈值 - 假设您完全替换行在一个文件中,这应该被认为是一个修改或删除和插入? – Pockets

+0

如果我们删除一行并在同一位置写入另一行,那么这是一个修改,如果我们删除一行并在另一位置添加另一行,则它是添加和删除的组合,如果我们仅添加行,则为添加。正如你可以在[https://github.com/wso2/product-apim/commit/6b7e426836a527ab57d4125aff34c48b7cbda1c1?diff=split]看到的任何如何检测被修改的行,我需要知道它是如何做到这一点 –

相关问题