2016-11-28 40 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]看到的任何如何檢測被修改的行,我需要知道它是如何做到這一點 –

相關問題