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

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

Ответ 1

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

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

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

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

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

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

Ответ 2

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

Ответ 3

git diff --shortstat

дает вам только количество строк, которые были изменены и добавлены. Это работает только с неустановленными изменениями. Для сравнения с веткой:

git diff --shortstat some-branch

Ответ 4

git diff --stat commit1 commit2

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

git diff --stat HEAD^ HEAD

чтобы сравнить родительский элемент HEAD с HEAD.

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

ниже одного - подсчитать последние 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