git diff'는 라인 번호와 변경된 파일 이름만 표시할 수 있습니까?
이 질문은 "라인 번호"를 요구합니다.출력에서 줄 번호에 관심이 없는 경우 이 질문과 대답을 참조하십시오.
기본적으로 변경된 내용은 보지 않고 파일 이름과 줄 번호만 보고 싶습니다.
이 명령을 사용하여 변경된 파일 이름을 확인할 수 있지만 줄 번호는 확인할 수 없습니다.
git diff --name-only
앞으로 나아가세요!
변경된 라인 수와 같은 라인 번호 또는 변경 사항이 포함된 실제 라인 번호?변경된 줄 수를 원하는 경우git diff --stat
이렇게 하면 다음과 같은 디스플레이가 제공됩니다.
[me@somehost:~/newsite:master]> git diff --stat
whatever/views/gallery.py | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
변경 사항 자체의 라인 번호를 가져오는 옵션은 없습니다.
참고: 변경된 파일의 이름(변경된 줄 번호 없음)만 찾는다면 여기에서 다른 답변을 참조하십시오.
이것에 대한 내장 옵션은 없지만(그리고 나는 그것이 모두 그렇게 유용하다고 생각하지 않는다), "외부 diff" 스크립트의 도움으로 Git에서 이것을 하는 것이 가능합니다.
여기 꽤 형편없는 것이 있습니다. 원하는 방식으로 출력을 조정하는 것은 당신에게 달려 있습니다.
#! /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 매뉴얼 페이지(700번 선 주변, 거의 끝에 있음).
사용:
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 --
이것이 바로 당신이 필요로 하는 것입니다.원격에서 커밋을 만들거나 새 커밋을 가져올 때와 동일한 형식입니다.
PS: 아무도 이런 식으로 대답하지 않은 것이 이상합니다.
내가 가장 좋아하는 것:
git diff --name-status
파일 상태를 추가합니다(예:
A new_file.txt
M modified_file.txt
D deleted_file.txt
통계량을 원하는 경우:
git diff --stat
다음과 같은 내용이 표시됩니다.
new_file.txt | 50 +
modified_file.txt | 100 +-
deleted_file | 40 -
마지막으로 파일 이름만 원하는 경우:
git diff --name-only
간단히 표시:
new_file.txt
modified_file.txt
deleted_file
지금부터 지정된 커밋 사이에 각 파일에서 변경된 파일 이름과 줄 수/줄 수를 표시합니다.
git diff --stat <commit-hash>
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-tree --no-commit-id --name-only -r
온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':'
예를 들어, 통합 diff:
$ 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 치인번:@@@ <from-file-range> <from-file-range> <to-file-range>
뒤에 OR 나지텍일치후트스@@@
.sed -e '0~3{s/ @@@[ ]\?//}'
@@@[ ]\?
한수 있습니다. " 3" " 1" " 1번째 줄부터 시작합니다.++<<<<<<< HEAD
.sed '2~3 s/$/\n1/g'
추가\n1
열 번호에 대한 두 번째 줄과 세 번째 줄 사이의 매 3줄.sed "N;N;N;s/\n/:/g"
마다 3줄씩 하세요.:
.
사용해 보십시오.
git dif | grep -B <number of before lines to show> <regex>
저의 경우, 저는 많은 파일에서 디버그 문을 어디에 두었는지 검색하려고 했습니다.다음과 같은 디버그 문을 이미 가져온 파일을 확인해야 했습니다.
git diff | grep -B 5 dd\(
사용합니다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 @@
아마도 여러분은 색깔이 있는 출력물을 볼 수 있을 것입니다.출력을 쉽게 읽을 수 있도록 도와줍니다.
예쁘지는 않지만 여기 한 줄의 bash가 있습니다.
git diff --unified=0 HEAD~1..HEAD | grep -Po '(^diff --git [a-zA-Z/._]*|^@@.*@@)' | while read l; do if [[ -n ${l##@@*} ]]; then f=${l#*/}; else echo "$f:${l##@@ }" | cut -d' ' -f1 | tr -d '-'; fi; done
설명:
git diff --unified=0 HEAD~1..HEAD
Git에서 커밋 정보를 검색합니다.
grep -Po '(^diff --git [a-zA-Z/._]*|^@@.*@@)'
이전 답변을 기반으로 파일 이름과 줄 번호가 포함된 줄로 필터링
- 가독성을 위해 한 줄씩 여러 줄로 확장:
while read line; do
if [[ -n ${line##@@*} ]]; then
# Grabs filename from this pattern: "diff --git a/....."
filename=${line#*/};
else
# Grabs line number from this patterns: "@@ -<line> +<line> @@"
echo"$filename:${line##@@ }" | cut -d' ' -f1 | tr -d '-';
fi;
done
예상 출력으로 변환하는 문자열 구문 분석:
file/name1.txt:34
file/name2.txt:98
file/name2.txt:101
file/name3.txt:2
언급URL : https://stackoverflow.com/questions/9848347/can-i-make-git-diff-only-display-the-line-numbers-and-changed-file-names
'programing' 카테고리의 다른 글
악명 높은 java.sql.SQL 예외:적합한 운전자를 찾을 수 없음 (0) | 2023.05.01 |
---|---|
Angular with Angular CLI의 특정 버전을 설치하는 방법은 무엇입니까? (0) | 2023.05.01 |
포크를 정리하고 업스트림에서 다시 시작합니다. (0) | 2023.05.01 |
Python을 찾을 수 없습니다. 인수 없이 실행하여 Microsoft Store에서 설치하거나 설정에서 이 바로 가기를 사용하지 않도록 설정합니다. (0) | 2023.05.01 |
UITableViewCell 사이에 간격을 추가하는 방법 (0) | 2023.05.01 |