Есть ли способ добавить строки git show, изменить строки и удалить строки? - PullRequest
76 голосов
/ 30 марта 2012

"git diff --stat" и "git log --stat" показывают такие вещи, как:

$ git diff -C --stat HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07
 app/controllers/application_controller.rb |   34 +++-------------------------
 1 files changed, 4 insertions(+), 30 deletions(-)

Но что действительно произошло в этом коммите, так это то, что 4 строки были изменены и 26 строк были удалены, что отличается от добавления 4 строк и удаления 30.

Есть ли способ получить дельта LOC (в данном случае 26)? Меня не волнует различие между добавленными или удаленными строками.

Ответы [ 4 ]

85 голосов
/ 30 марта 2012

Вы можете использовать:

git diff --numstat

для получения числовой информации о различиях.

Поскольку отделение модификации от пары добавления и удаления может помочь, --word-diff может помочь.Вы можете попробовать что-то вроде этого:

MOD_PATTERN='^.+(\[-|\{\+).*$' \
ADD_PATTERN='^\{\+.*\+\}$' \
REM_PATTERN='^\[-.*-\]$' \
git diff --word-diff --unified=0 | sed -nr \
    -e "s/$MOD_PATTERN/modified/p" \
    -e "s/$ADD_PATTERN/added/p" \
    -e "s/$REM_PATTERN/removed/p" \
    | sort | uniq -c

Это немного скучно, поэтому вы можете вместо этого проанализировать его в своем собственном сценарии.

46 голосов
/ 02 декабря 2016
  1. Если вы хотите знать, какие строки добавляются / изменяются / удаляются коммитом с идентификатором commit-id, вы можете использовать

    git show commit-id --stat
    

    или

    git diff commit-id-before commit-id --stat
    
  2. Если вы хотите узнать, какие строки добавлены / изменены / удалены с помощью фиксации диапазона, вы можете использовать

    git diff commit-id1 commit-id2 --stat
    
  3. Если вы хотите знать строкидобавлены / изменены / удалены при каждом коммите, вы можете использовать

    git log --stat
    
2 голосов
/ 30 марта 2012

git использует "унифицированный" diff, который только добавил и удалил строки, в качестве формата diff. Вы должны сделать что-то внешнее, чтобы получить diff, который показывает добавление, удаление и изменение информации.

https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git дает ссылки на скрипт, который позволяет запускать обычный старый "diff" - и из этого вы можете генерировать вывод "context" diff . В контекстном дифференциале отображаются добавленные, удаленные и измененные строки, что должно позволить вам получить нужные данные.

1 голос
/ 05 марта 2019

Если все ваши файлы подготовлены для фиксации, вы увидите, что --numstat выглядит следующим образом:

git diff --numstat HEAD~
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...