2012-03-29 2 views
42

«мерзавец дифф --stat» и «Журнал мерзавец --stat» показывает такие вещи, как:Есть ли способ добавления линий шоу git, изменения линий и удаления линий?

$ 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 в этом случае)? Мне не все равно, чтобы различать добавленные или удаленные строки.

ответ

45

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

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 

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

+0

Благодаря quornian но numstat дает точно такую ​​же информацию, как стат, добавления и удаления , –

+0

Обновлен мой ответ, чтобы включить пример использования '-word-diff'. Это может быть более полезным. – quornian

+0

Спасибо! Ваш отредактированный ответ замечательный. Я хотел посмотреть, сколько строк было добавлено/изменено/удалено между двумя конкретными коммитами. Для других, кто захочет сделать то же самое, просто введите имена ветвей в команде, как в: 'git diff commit1 commit2 --word-diff ...' где commit1/2 - SHA1, ветви, теги и т. Д. . –

1

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

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

13
  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 
    
Смежные вопросы