2010-03-27 88 views
475

有沒有簡單的方法來計算git中兩次提交之間改變的行數?我知道我可以做一個git diff,並計算線條,但這看起來很乏味。我也想知道我該如何做到這一點,只包括我自己在linecounts中的提交。如何計算git中兩次提交之間更改的行數?

回答

737

你想要的git diff--stat選項,或者如果你正在尋找一個腳本來分析這一點,--numstat選項。

git diff --stat <commit-ish> <commit-ish> 

--stat產生您在合併之後看到的人類可讀輸出; --numstat產生一個很好的表格佈局,腳本可以很容易地解釋。

我不知何故錯過了你正在尋找在同一時間多次提交 - 這是git log的任務。 Ron DeVera談到這一點,但實際上你可以做的比他所提到的要多得多。由於git log內部調用diff設備以打印請求的信息,因此您可以給它任何差異統計選項 - 不僅僅是--shortstat。你可能想使用什麼是:

git log --author="Your name" --stat <commit1>..<commit2> 

但你可以使用--numstat--shortstat爲好。 git log也可以選擇提交其他各種方式 - 看看documentation。您可能會對--since(而不是指定提交範圍,僅選擇自上週以來的提交)和--no-merges(合併提交實際上不會引入更改)以及漂亮的輸出選項(--pretty=oneline, short, medium, full...)感興趣。

這裏是一個一行得到總的變化,而不是每次提交的git的日誌變化(如需要更改提交選擇選項 - 這是你的提交,從commit1到commit2):

git log --numstat --pretty="%H" --author="Your Name" commit1..commit2 | awk 'NF==3 {plus+=$1; minus+=$2} END {printf("+%d, -%d\n", plus, minus)}' 

(你必須讓git log打印一些關於提交的標識信息;我隨意選擇了散列,然後用awk僅挑選出帶有三個字段的行,這些字段與stat信息一致)

+0

有沒有什麼辦法可以包含我自己的提交? – Mike 2010-03-27 04:45:45

+2

@Mike:編輯於! – Cascabel 2010-03-27 04:51:39

+0

這不回答有關「更改的行」的原始問題。一行更改計算爲插入行和刪除行。計算更改的行數需要比此處所述更多的工作。 – 2012-01-26 09:52:21

32
git diff --stat commit1 commit2 

編輯:你必須指定提交以及(沒有參數比較工作目錄與索引)。例如。

git diff --stat HEAD^ HEAD 

HEAD父與HEAD比較。

+1

絕對沒有必要使用'diff-index' - ''diff'前端可以處理所有事情;我相信'diff-index'的情況被'--cached/- staged'覆蓋。 (並且沒有辦法使用'diff-index'來比較OP所要求的兩個任意提交。) – Cascabel 2010-03-27 04:17:31

+0

這對我來說沒有任何意義。 – Mike 2010-03-27 04:47:11

+0

@Mike:你沒有離開克拉?你最近的提交合並提交?如果git說沒有差異,那是因爲沒有差異。 – Cascabel 2010-03-27 06:46:46

14

假設你想要比較abcd123(第一個提交)和wxyz789(最後一個提交)之間的所有提交,包括:

git log wxyz789^..abcd123 --oneline --shortstat --author="Mike Surname" 

這給喜歡簡潔的輸出:

abcd123 Made things better 
3 files changed, 14 insertions(+), 159 deletions(-) 
wxyz789 Made things more betterer 
26 files changed, 53 insertions(+), 58 deletions(-) 
+0

這對我來說沒有任何意義(我已經提交併驗證了--author使用git log並且沒有其他參數是正確的)。 – Mike 2010-03-27 04:46:51

+0

這也發生在我身上。這兩個提交的順序是錯誤的,交換它們來固定它。 – 2013-01-08 01:04:17

+1

更新了提交順序並澄清了兩個SHA代表的內容。感謝您的支持:) – 2014-03-05 06:01:39

127

懶惰的,git log --stat

+18

也可以使用'git log --shortstat'。 – hazrpg 2015-09-03 08:27:46

+6

我發現這個很有用,加了一個'-10'來顯示前面的十個提交。 – meetalexjohnson 2016-08-26 22:39:29

+0

我們懶人們謝謝你! – 2017-04-05 13:04:21

45

git diff --shortstat

給你剛纔的線條變化,增加的號碼。

+5

就是我在找的東西,輸出結果是'655個文件改變了,22619個插入(+),22558個刪除( - )' – Daniel 2017-01-03 12:27:01

+1

感覺這個問題比接受的答案更好地回答了問題。 – 2017-04-07 18:48:05

3

另一種方式來獲得所有的更改日誌中的指定時間內

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" 

輸出:

2637cc736 Revert changed code 
1 file changed, 5 insertions(+), 5 deletions(-) 
ba8d29402 Fix review 
2 files changed, 4 insertions(+), 11 deletions(-) 

有着悠久的輸出內容,您可以導出到文件的可讀性更強

git log --author="Tri Nguyen" --oneline --shortstat --before="2017-03-20" --after="2017-03-10" > /mnt/MyChangeLog.txt