Есть ли простой способ вычислить количество строк, измененных между двумя коммитами в git? Я знаю, что могу сделать git diff
, и считать строки, но это кажется утомительным. Я также хотел бы знать, как я могу это сделать, включая только мои собственные фиксации в linecounts.
Как я могу вычислить количество строк, измененных между двумя коммитами в git?
Ответ 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