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

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

6 ответов


вы хотите на git diff, или если вы хотите разобрать этот скрипта .

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 (измените параметры выбора фиксации по желанию-это фиксация вами, от commit1 до commit2):

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

(вы должны позволить журналу git напечатать некоторую идентифицирующую информацию о фиксации; я произвольно выбрал хэш, затем использовал awk чтобы выбрать только строки с тремя полями, которые являются теми, с информацией о статистике)


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


git diff --shortstat

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


git diff --stat commit1 commit2

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

git diff --stat HEAD^ HEAD

для сравнения родителя HEAD С HEAD.


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

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

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