답변:
참고 : 변경된 파일 의 이름 을 찾고있는 경우 (변경 된 줄 의 줄 번호 없이 ) 쉽게 할 수 있습니다 . 여기에서 다른 답변 링크를 클릭하십시오 .
아무 이것에 대한 옵션을 내장하지 (그리고 나는 모든 중 유용한 것을 생각하지 않습니다)하지만 입니다 "외부 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_DIFF
은 git 매뉴얼 페이지 의 설명을 참조하십시오 .
| grep -o '^[0-9]*'
오른쪽에 신경 쓰지 않는다고 가정하면 파이핑을 하면 숫자 만 제공됩니다.
--diff-filter=...
를 Where ...
: 부분은 당신이보고 싶은 변화의 종류 M
, 수정을 위해 A
, 추가 된 D
당 삭제를 위해, 그리고 다른 git diff
문서.
너무 쉽게:
git diff --name-only
가서 diff!
git diff --name-only master..HEAD
변경된 줄 수 또는 변경 사항을 포함하는 실제 줄 번호와 같은 줄 번호? 변경된 줄 수를 원하면을 사용하십시오 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 --
이것이 바로 당신이 필요로하는 것입니다. 커밋을 만들거나 원격에서 새 커밋을 가져올 때와 같은 형식입니다.
추신 : 아무도이 방법으로 대답하지 않은 것으로 유선.
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
나는 이것이 오래된 질문이라는 것을 알고 있지만 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 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
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>
일치 이후의 나머지 텍스트와 일치 @@@
시킵니다.sed -e '0~3{s/ @@@[ ]\?//}'
: @@@[ ]\?
모든 세 번째 줄에서 제거 하여 선택 사항 인 한 줄 컨텍스트를 이전에 얻습니다 ++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
: \n1
열 번호의 두 번째 줄과 세 번째 줄 사이에 세 줄을 모두 추가합니다.sed "N;N;N;s/\n/:/g"
:로 3 줄마다 연결하십시오 :
.나는 grep
순진한 해결책으로 사용 합니다.
$ git diff | grep -A2 -- '---'
출력 예 :
--- a/fileA.txt
+++ b/fileA.txt
@@ -0,0 +1,132 @@
--
--- a/B/fileC.txt
+++ b/B/fileC.txt
@@ -33663,3 +33663,68800 @@ word_38077.png,Latin
--
--- a/D/fileE.txt
+++ b/D/fileE.txt
@@ -17998,3 +17998,84465 @@ word_23979.png,Latin
--
--- a/F
+++ b/F
@@ -1 +1 @@
컬러 출력이 표시 될 수 있습니다. 출력을 쉽게 읽을 수 있도록 도와줍니다.