Как я могу рассчитать количество строк, измененных между двумя коммитами в 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 log напечатать некоторую идентифицирующую информацию о фиксации; я произвольно выбрал хэш, а затем использовал awk чтобы только выбрать строки с тремя полями, которые являются те, с информацией stat)
git diff --stat commit1 commit2EDIT: вы также должны указать коммиты (без параметров он сравнивает рабочий каталог с индексом). Е. Г.
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
Comments