수정 된 줄만 표시하는 Git diff
git diff를 수행하면 추가 된 행이 표시됩니다.
+ this line is added
제거 된 줄 :
- this line is removed
그러나 수정되지 않은 많은 줄을 보여줍니다.
this line is not modified
this line is also not modified
결과적으로 실제 연주 git diff는 다음과 같이 시청합니다.
+ this line is added
this line is not modified
- this line is removed
this line is not modified
수정 된 줄만 표시하고 수정되지 않은 다른 모든 코드는 무시할 수 있습니까? 앞에 "+"또는 "-"기호가없는 모든 줄을 제거하는 방법을 작성했지만 작업을 더 간단하게 수행해야합니다.
내 git diff에서 수정 된 줄을 보는 데 관심이 있습니다.
미리 감사드립니다.
당신이 원하는 것은 0 줄의 다수를 가진 것입니다. 다음과 같이 생성 할 수 있습니다.
git diff --unified=0
또는
git diff -U0
이 저장소의 구성 옵션으로 접근 가능합니다.
git config diff.context 0
모든 저장소에 대해 전역 설정을 수행하십시오.
git config --global diff.context 0
+and로 시작하는 행만 표시하는 또 다른 해킹 (un * x) -:
git diff -U0 | grep '^[+-]' | grep -Ev '^(--- a/|\+\+\+ b/)'
위의 코드는 다음을 수행합니다.
git diff -U0: 0 라인 선택- 첫 번째 grep에는
+또는 시작하는 모든 행만 포함됩니다.- - 두 번째 grep은
--- a/또는 시작하는 줄을 제외합니다.+++ b/
참고 : - 당신이 좋아하는 추가 자식은 사랑하는 옵션을 사용하는 경우 위의 솔루션 은 수정해야합니다 -R, --src-prefix, --dst-prefix, --no-prefix, ... - 두 greps은 단일으로 결합 할 수 있습니다 grep -E -v '^(\+\+\+ b/|--- a/|@@ |diff --git|index )',하지만 난 이해하기 이중 그렙 버전을 쉽게 사용할 수 있습니다.
Chris의 최근 댓글에 이어 사후 처리의 주요 문제는 줄이로 시작하는 것을 유지 -|+하고 ---|+++. 반면에 레포에 패치 파일을 저장하는 경우 (필자는 Pydoop에서 )로 시작하는 줄을 유지하고 --|++필요한 정규 작업이 약간 관련됩니다.
git diff | grep -P '^\+(?:(?!\+\+))|^-(?:(?!--))'
정규 사용은 동일한 예견을 사용합니다 . 자세한 설명은 이 질문에 대한 Peter Boughton의 답변을 참조하세요.
이 작업을 자주 수행하는 경우 git 사용을 설정하는 것이 좋습니다.
git config --global alias.diffonly '!git diff | grep -P "^\+(?:(?!\+\+))|^-(?:(?!--))"'
당신이 라인 변경이있는 경우이하지 않는 것이 라인 자체로 시작되는 것을 나는주의와 함께, 정규식 기억하기 훨씬 짧은 생각할 수있는 간단한 경우에 +이나-
$ git diff | grep '^[+|-][^+|-]'
정규식은 줄이 +또는로 시작해야 -하고 바로 다음 문자는 이들 중 어느 것도 아니어야할까요 . +여기서 탈출하든 아니든 똑같은 결과를 얻었습니다 , btw ...
예 :
$ cat testfile
A
B
C
D
E
F
G
말 I 변화 C에 X, E에 Y, 그리고 G에 Z.
$ git diff | grep '^[+|-][^+|-]'
-C
+X
-E
+Y
-G
+Z
그러나 대부분의 경우에는 대부분의 경우에 있습니다. 해당 출력을 파일로 파이프 dout한 다음 동일한 정규식을 시도하면 작동하지 않습니다.
$ git diff dout | grep '^[+|-][^+|-]'
$
어쨌든, 당신의 경우에 도움이되기를 바랍니다.
이 답변은 가독성을 위해 원래의 빨강 / 녹색 색상을 유지합니다. 구문에 몇 가지 변형을 제공했습니다.
git diff --color | grep --color=never $'^\e\[3[12]m'
git diff --color | grep --color=never $'^\033\[3[12]m'
git diff --color | grep --color=never -P '^\e\[3[12]m'
git diff --color | grep --color=never -P '^\033\[3[12]m'
설명 :
- 은
git diff --color이 파이프되는 개 색상을 사용하지 않도록 설정에서 자식을 방지하기 위해 필요하다. - 는
grep --color=never원래의 색상을 제거하고 일치하는 것을 강조합니다. - 빨간색 (
\e[31m) 또는 녹색 (\e[32m) 이스케이프 코드로 시작하는 줄을 찾습니다. $'...'(ANSI-C 인용 구) 또는-P(펄 구문)하게하는grep해석\e또는\033int로서ESC문자.
참고 URL : https://stackoverflow.com/questions/18810623/git-diff-to-show-only-lines-that-have-been-modified
'IT' 카테고리의 다른 글
| _gaq.push ([ '_ trackPageLoadTime'])는 어떻게 작동합니까? (0) | 2020.08.16 |
|---|---|
| UITextField 편집을 계속하지만 여전히 터치를 허용하는 방법은 무엇입니까? (0) | 2020.08.16 |
| Java 프로젝트의 패키지 구조? (0) | 2020.08.16 |
| 매개 변수로 SQL 쿼리의 목록 목록 (0) | 2020.08.16 |
| List 간 자유롭게 변환 (0) | 2020.08.16 |