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



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

529   6  
git

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 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

Comments

    Ничего не найдено.