“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)를 얻을 수있는 방법이 있습니까? 나는 추가되거나 제거 된 줄을 구별하는 것에 대해 정말로 신경 쓰지 않습니다.
답변
당신이 사용할 수있는:
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
약간 길어서 대신 자신의 스크립트에서 구문 분석 할 수 있습니다.
답변
-
id가있는 커밋에 의해 추가 / 변경 / 삭제 된 줄을 알고 싶다면
commit-id
다음을 사용할 수 있습니다.git show commit-id --stat
또는
git diff commit-id-before commit-id --stat
-
범위 커밋에 의해 추가 / 변경 / 삭제 된 줄을 알고 싶다면 다음을 사용할 수 있습니다.
git diff commit-id1 commit-id2 --stat
-
각 커밋별로 추가 / 변경 / 삭제 된 줄을 알고 싶다면 다음을 사용할 수 있습니다.
git log --stat
답변
모든 파일이 커밋을 위해 준비된 경우 --numstat
다음과 같이 이동합니다.
git diff --numstat HEAD~
답변
git은 diff 형식으로 행을 추가하고 삭제 한 “통합”diff를 사용합니다. 정보 추가, 삭제 및 변경을 보여주는 diff를 얻으려면 외부 작업을 수행해야합니다.
https://wiki.postgresql.org/wiki/Working_with_Git#Context_diffs_with_Git 은 일반적인 이전 “diff”를 실행할 수있는 스크립트에 대한 링크를 제공하며, 여기서 “context”diff 출력을 생성 할 수 있습니다 . 컨텍스트 차이는 추가, 제거 및 변경된 행을 표시하므로 원하는 데이터를 얻을 수 있습니다.
답변
diffstat
수정 된 줄 수를 표시하는 데 사용할 수 있습니다 . 예를 들면 :
git diff HEAD c9af3e6136e8aec1f79368c2a6164e56bf7a7e07 | diffstat -C -m
-C
옵션은 colourised 출력을 얻기위한 것입니다; 이 -m
옵션은 수정 된 줄 수를 표시하는 것입니다. 샘플 출력 :
app/controllers/application_controller.rb | 30 -------------------!!!
1 files changed, 0 insertions(+), 26 deletions(-), 4 modifications(!)
수정 된 줄 수는 대략적인 man diffstat
것입니다.
-m 패치 파일의 각 “청크”에서 삽입 / 삭제 카운트를 병합하여 수정 된 줄의 개수를 추정합니다.
사이에 하나의 주요 차이점 git diff --stat
과 diffstat
: diffstat
(예를 파일 이동 / 이름 변경을 표시하지 않습니다 app/{a.rb => b.rb}
).