Как я могу рассчитать количество строк, измененных между двумя коммитами в git? - PullRequest
621 голосов
/ 27 марта 2010

Есть ли простой способ вычислить количество строк, измененных между двумя коммитами в git? Я знаю, что могу сделать git diff и считать строки, но это кажется утомительным. Я также хотел бы знать, как я могу сделать это, включая только мои собственные коммиты в linecounts.

Ответы [ 8 ]

947 голосов
/ 27 марта 2010

Вам нужна опция --stat, равная git diff, или, если вы хотите разобрать это в скрипте, опция --numstat.

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

--stat производит читабельный вывод, который вы привыкли видеть после слияний; --numstat создает хороший макет таблицы, который легко интерпретируется сценариями.

Я почему-то упустил, что вы пытались сделать это одновременно с несколькими коммитами - это задача для git log. Рон Девера касается этого, но на самом деле вы можете сделать гораздо больше, чем он упоминает. Так как git log внутренне вызывает механизм diff для печати запрошенной информации, вы можете задать ей любой из параметров diff stat - не просто --shortstat. Что вы, вероятно, хотите использовать:

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

но вы также можете использовать --numstat или --shortstat. git log также может выбирать коммиты различными способами - взгляните на документацию . Возможно, вас заинтересуют такие вещи, как --since (вместо указания диапазонов фиксации, просто выберите коммиты с прошлой недели) и --no-merges (коммиты слияния фактически не вносят изменений), а также симпатичные параметры вывода (--pretty=oneline, short, medium, full... ).

Вот одна строка для получения полных изменений вместо изменений для каждого коммита из git log (измените параметры выбора коммитов по желанию - это коммиты вами, от 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, чтобы выделить только строки с тремя полями, которые являются данными со статистической информацией)

167 голосов
/ 27 октября 2014

Для ленивых используйте git log --stat.

125 голосов
/ 24 декабря 2016
git diff --shortstat

дает вам только количество строк, измененных и добавленных.

39 голосов
/ 27 марта 2010
git diff --stat commit1 commit2

EDIT: Вы также должны указать коммиты (без параметров он сравнивает рабочий каталог с индексом). Э.Г.

git diff --stat HEAD^ HEAD

для сравнения родительского элемента HEAD с HEAD.

16 голосов
/ 27 марта 2010

Предполагая, что вы хотите сравнить все ваши коммиты между 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(-)
11 голосов
/ 17 марта 2017

Другой способ получить весь журнал изменений за указанный период времени

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
2 голосов
/ 08 февраля 2019

git log --numstat просто дает вам только цифры

1 голос
/ 16 ноября 2018

Хотя все вышеприведенные ответы верны, ниже один удобно использовать, если вам нужно количество последних коммитов

ниже единицы - подсчет последних 5 коммитов

git diff $(git log -5 --pretty=format:"%h" | tail -1) --shortstat

чтобы получить количество последних 10 коммитов

git diff $(git log -10 --pretty=format:"%h" | tail -1) --shortstat

generic - изменить N на количество последних совершенных коммитов

git diff $(git log -N --pretty=format:"%h" | tail -1) --shortstat

чтобы получить количество всех коммитов с начала

git diff $(git log --pretty=format:"%h" | tail -1) --shortstat

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...