IT

수정 된 줄만 표시하는 Git diff

lottoking 2020. 8. 16. 21:29
반응형

수정 된 줄만 표시하는 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 변화 CX, EY, 그리고 GZ.

$ 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

반응형