git show 줄을 추가하고 줄을 변경하고 줄을 제거하는 방법이 있습니까? 다음과 같은 출력을 표시합니다. $ git diff -C

“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

약간 길어서 대신 자신의 스크립트에서 구문 분석 할 수 있습니다.


답변

  1. id가있는 커밋에 의해 추가 / 변경 / 삭제 된 줄을 알고 싶다면 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
    

답변

모든 파일이 커밋을 위해 준비된 경우 --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 --statdiffstat: diffstat(예를 파일 이동 / 이름 변경을 표시하지 않습니다 app/{a.rb => b.rb}).