IT story

'git diff'가 변경된 파일 이름과 줄 번호 만 표시하도록 할 수 있습니까?

hot-time 2020. 4. 15. 12:34
반응형

'git diff'가 변경된 파일 이름과 줄 번호 만 표시하도록 할 수 있습니까?


기본적으로 변경된 내용, 파일 이름 및 줄 번호를보고 싶지 않습니다.


참고 : 변경된 파일 의 이름찾고있는 경우 (변경 줄 번호 없이 ) 쉽게 할 수 있습니다 . 여기에서 다른 답변 링크를 클릭하십시오 .


아무 이것에 대한 옵션을 내장하지 (그리고 나는 모든 중 유용한 것을 생각하지 않습니다)하지만 입니다 "외부 DIFF"스크립트의 도움으로, 자식에서이 작업을 수행 할 수.

여기 꽤 엉뚱한 것이 있습니다. 출력을 원하는 방식으로 수정하는 것은 사용자의 책임입니다.

#! /bin/sh
#
# run this with:
#    GIT_EXTERNAL_DIFF=<name of script> git diff ...
#
case $# in
1) "unmerged file $@, can't show you line numbers"; exit 1;;
7) ;;
*) echo "I don't know what to do, help!"; exit 1;;
esac

path=$1
old_file=$2
old_hex=$3
old_mode=$4
new_file=$5
new_hex=$6
new_mode=$7

printf '%s: ' $path
diff $old_file $new_file | grep -v '^[<>-]'

"외부 diff"에 대한 자세한 내용 GIT_EXTERNAL_DIFFgit 매뉴얼 페이지 의 설명을 참조하십시오 .


너무 쉽게:

git diff --name-only

가서 diff!


변경된 줄 수 또는 변경 사항을 포함하는 실제 줄 번호와 같은 줄 번호? 변경된 줄 수를 원하면을 사용하십시오 git diff --stat. 이것은 다음과 같은 디스플레이를 제공합니다.

[me@somehost:~/newsite:master]> git diff --stat
 whatever/views/gallery.py |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

변경 사항 자체의 줄 번호를 가져 오는 옵션은 없습니다.


git diff master --compact-summary

출력은 다음과 같습니다

 src/app/components/common/sidebar/toolbar/toolbar.component.html   |  2 +-
 src/app/components/common/sidebar/toolbar/toolbar.component.scss   |  2 --

이것이 바로 당신이 필요로하는 것입니다. 커밋을 만들거나 원격에서 새 커밋을 가져올 때와 같은 형식입니다.

추신 : 아무도이 방법으로 대답하지 않은 것으로 유선.


나는 이것이 오래된 질문이라는 것을 알고 있지만 Windows에서는 파일에 대한 git 출력과 변경된 줄 번호를 필터링합니다.

(git diff -p --stat) | findstr "@@ --git"

diff --git a/dir1/dir2/file.cpp b/dir1/dir2/file.cpp
@@ -47,6 +47,7 @@ <some function name>
@@ -97,7 +98,7 @@ <another functon name>

파일과 변경된 줄을 추출하는 것이 약간 더 많은 작업입니다.

for /f "tokens=3,4* delims=-+ " %f in ('^(git diff -p --stat .^) ^| findstr ^"@@ --git^"') do @echo %f

a/dir1/dir2/file.cpp
47,7
98,7

지금과 지정된 커밋 사이에서 각 파일에서 변경된 파일 이름과 행 수 / 숫자를 표시합니다.

git diff --stat <commit-hash>

1) 내가 좋아하는 것 :

git diff --name-status

파일 상태 앞에 붙습니다. 예 :

A   new_file.txt
M   modified_file.txt 
D   deleted_file.txt

2) 통계를 원하면 다음을 수행하십시오.

git diff --stat

다음과 같은 내용이 표시됩니다.

new_file.txt         |  50 +
modified_file.txt    | 100 +-
deleted_file         |  40 -

3) 마지막으로 파일 이름 만 정말로 원한다면 :

git diff --name-only

단순히 보여줄 것이다 :

new_file.txt
modified_file.txt
deleted_file

가장 깨끗한 출력, 즉 파일 이름 / 경로 만

git diff-tree --no-commit-id --name-only -r

HTH


git version 2.17.1, 내장 플래그하지가 이 목적을 달성하기 위해.

통합 diff에서 파일 이름과 줄 번호를 필터링하는 명령 예는 다음과 같습니다.

git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'

예를 들어, 통합 된 차이점은 다음과 같습니다.

$ git diff --unified=0
diff --cc foobar
index b436f31,df63c58..0000000
--- a/foobar
+++ b/foobar
@@@ -1,2 -1,2 +1,6 @@@ Line abov
++<<<<<<< HEAD
 +bar
++=======
+ foo
++>>>>>>> Commit message

결과는 다음과 같습니다.

❯ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? @@@)' | paste -s -d':'
foobar:1

공통 grep 일치 결과에서 명령 출력을 일치 시키려면 다음을 수행하십시오.

$ git diff --unified=0 | grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? )| @@@.*' | sed -e '0~3{s/ @@@[ ]\?//}' | sed '2~3 s/$/\n1/g' | sed "N;N;N;s/\n/:/g"
foobar:1:1:Line abov
  1. grep -Po '^diff --cc \K.*|^@@@( -[0-9]+,[0-9]+){2} \+\K[0-9]+(?=(,[0-9]+)? ): diff --cc <filename>OR 에서 파일 이름 일치 OR 에서 줄 번호 @@@ <from-file-range> <from-file-range> <to-file-range>일치 이후의 나머지 텍스트와 일치 @@@시킵니다.
  2. sed -e '0~3{s/ @@@[ ]\?//}': @@@[ ]\?모든 세 번째 줄에서 제거 하여 선택 사항 인 한 줄 컨텍스트를 이전에 얻습니다 ++<<<<<<< HEAD.
  3. sed '2~3 s/$/\n1/g': \n1열 번호의 두 번째 줄과 세 번째 줄 사이에 세 줄을 모두 추가합니다.
  4. sed "N;N;N;s/\n/:/g":로 3 줄마다 연결하십시오 :.

참고 : https://stackoverflow.com/questions/9848347/can-i-make-git-diff-only-show-the-changed-file-names-and-line-numbers

반응형