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