Есть ли простой способ вычислить количество строк, измененных между двумя коммитами в git?
Я знаю, что могу сделать git diff
и посчитать строки, но это кажется утомительным. Я также хотел бы знать, как я могу сделать это, включая только мои собственные коммиты в linecounts.
Ответы:
Вам нужна
--stat
опцияgit diff
или, если вы хотите разобрать это в скрипте,--numstat
опция.--stat
производит удобочитаемый вывод, который вы привыкли видеть после слияний;--numstat
создает хороший макет таблицы, который сценарии могут легко интерпретировать.Я почему-то упустил, что вы пытаетесь сделать это одновременно с несколькими коммитами - это задача для
git log
. Рон ДеВера касается этого, но на самом деле вы можете сделать гораздо больше, чем он упоминает. Поскольку дляgit log
вызова запрошенной информации внутренне вызывается механизм сравнения, вы можете задать ему любой из параметров статистики - не только--shortstat
. Что вы, вероятно, хотите использовать:но вы можете использовать
--numstat
или--shortstat
как хорошо.git log
Вы также можете выбирать коммиты различными способами - взгляните на документацию . Возможно, вас заинтересуют такие вещи, как--since
(вместо указания диапазонов фиксации, просто выберите коммиты с прошлой недели) и--no-merges
(коммиты слияния фактически не вносят изменений), а также симпатичные параметры вывода (--pretty=oneline, short, medium, full...
).Вот одна строка для получения полных изменений вместо изменений для каждого коммита из git log (измените параметры выбора коммитов по желанию - это коммиты вами, от commit1 до commit2):
(вы должны позволить git log распечатать некоторую идентифицирующую информацию о коммите; я произвольно выбрал хеш, а затем использовал awk, чтобы выделить строки только с тремя полями, которые являются данными со статистической информацией)
источник
git diff --shortstat <commit1> <commit2>
был тот, который я хотел.--since
и--until
что - то вроде:yesterday
,1 month 2 weeks 3 days 1 hour 1 second ago
или1979-02-26 18:30:00
<commit-ish>
- она работает со всем, что представляет коммит, включая литеральные коммиты, ветки, теги и ссылки в целом. См. Также stackoverflow.com/questions/23303549/…Для ленивых используйте
git log --stat
.источник
-10
чтобы показать предыдущие десять коммитов.Q
для возврата в терминал.дает вам только количество строк, измененных и добавленных. Это работает только с неустановленными изменениями. Для сравнения с веткой:
источник
git add
, убедитесь, что сделалиgit diff --shortstat --cached
РЕДАКТИРОВАТЬ: Вы также должны указать коммиты (без параметров он сравнивает рабочий каталог с индексом). Например
сравнить родителя
HEAD
сHEAD
.источник
diff-index
-diff
интерфейс может обрабатывать все; делоdiff-index
покрыто--cached/--staged
, я полагаю. (И нет способа использоватьdiff-index
для сравнения двух произвольных коммитов, как просил ОП.)git diff --stat HEAD
HEAD~n
, гдеn
, как далеко вы хотите вернуться.git diff --stat HEAD~5 HEAD
покажет объединенную статистику за последние 5 коммитов относительно HEAD.Предполагая, что вы хотите сравнить все ваши коммиты между abcd123 (первый коммит) и wxyz789 (последний коммит), включительно:
Это дает краткий вывод как:
источник
--shortstat
Флаг является удивительным, он работает с ,git diff
хотя (неgit log
).Другой способ получить все изменения журнала за указанный период времени
Вывод:
С длинным контентом, вы можете экспортировать в файл для более удобочитаемого
источник
Хотя все приведенные выше ответы верны, ниже один удобно использовать, если вам нужно количество последних коммитов
ниже одного, чтобы получить количество последних 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
источник
Git Log --Numstat просто дает вам только цифры
источник
Я просто решил эту проблему для себя, поэтому я поделюсь тем, что я придумал. Вот конечный результат:
Основная команда выглядит так:
Обратите внимание на команду
$@
в log для передачи ваших аргументов, таких как--author="Brian"
или--since=yesterday
.Выход из awk для помещения его в псевдоним git был грязным, поэтому вместо этого я поместил его в исполняемый скрипт на моем пути (
~/bin/git-stat-sum
), а затем использовал скрипт в псевдониме в моем.gitconfig
:И это работает очень хорошо. И последнее, что следует отметить,
file changes
- это количество изменений в файлах, а не количество уникальных файлов, которые были изменены. Это то, что я искал, но, возможно, это не то, что вы ожидаете.Вот еще один пример или два
Действительно, вы должны иметь возможность заменить любую
git log
команду наgit summary
.источник