git diff의 grep은 파일 및 줄 번호를 표시합니다.

git diff의 grep은 파일 및 줄 번호를 표시합니다.

브랜치에서 작업할 때 "TODO" 주석으로 빠르게 이동하고 싶습니다. 이것은 의미한다

  1. 내 브랜치에 "TODO" 주석만 추가하고 싶습니다(마스터의 주석은 무시).
  2. 각 일치 항목에 대해 파일과 줄 번호를 표시하고 싶습니다.

나는 두 가지 부분적인 해결책을 알고 있습니다. git grep TODO형식은 정확하지만(grep.lineNumber를 true로 설정) 결과가 너무 많습니다. git diff master... | grep TODO좋은 결과 집합이지만 파일 및 줄 번호는 표시되지 않습니다.

git diff변경된 각 줄에 파일 이름과 줄 번호 접두사를 추가하도록 지시하는 옵션이 있습니까 ? ( --line-prefix유망해 보이지만 고정 문자열만 필요한 것 같습니다.)

합격할 수 있을까요 --new-line-format=":%dn: %L"(diff - 줄 번호 출력) 통과하다 git diff?


예를 들어 현재 검색 결과는 다음과 같습니다.

$ git diff master... | grep TODO
+    // TODO use a non-fatal assertion
+        // TODO use a non-fatal assertion
+// TODO make this conditional too

그러나 이상적으로 나는 이것을 원합니다:

src/foo/abc.cpp:221:+    // TODO use a non-fatal assertion
src/foo/xyz.cpp:934:+        // TODO use a non-fatal assertion
src/foo/util/extra.h:49:+// TODO make this conditional too

답변1

patchGit 로그를 사용할 수 있습니다 :

git log -p
# Hit '/' for search mode.
# Type TODO
# Then hit 'n' for next

지점을 제한하려면 추가할 수 있습니다.firstcommit...HEAD

답변2

OP와 똑같은 작업을 수행하고 싶습니다. 내 브랜치에 추가된 TODO를 찾으세요.

그래서 나는diff2vimgrep스크립트. 그런 다음 전원을 연결하세요.fzf.vim(vim의 퍼지 파인더):

command! -bang -nargs=0 RgDiffMaster call fzf#vim#grep("git diff master... | diff2vimgrep", 0, {}, <bang>0)

바라보다: 데모

답변3

거의 맞췄습니다. ~에서공식 git-grep 문서:

-h
-H
  By default, the command shows the filename for each match. -h option is used
  to suppress this output. -H is there for completeness and does not do
  anything except it overrides -h given earlier on the command line.

...

-n
--line-number
  Prefix the line number to matching lines.

이는 다음 명령을 의미합니다.

git grep -n TODO

"TODO"를 포함하는 모든 파일은 이름(기본 동작) 및 일치하는 줄 번호( 사용 -n)와 함께 표시되어야 합니다. 출력 예:

lib/my_script.py:67:    # TODO patch this
      ^          ^            ^
      |          |            |
  filepath    line number   matched line

일치하는 항목이 너무 많으면 grep 검색에서 :^some_folder해당 폴더를 제외 할 수 있습니다("예" 단락 참조).some_folder

git grep -n TODO :^some_folder

또는 출력을 필터링하여 원하는 파일이나 폴더만 찾으려면 sed또는 같은 셸 명령을 파이프하세요 .awk

또한 기본적으로 표시되는 줄 번호를 설정할 수 있습니다("구성" 단락 참조).

grep.lineNumber
  If set to true, enable -n option by default.

이것은 다른 답변에 설명된 대로 설정할 수 있습니다.이 문제,예를 들어:

git config --global grep.lineNumber true

관련 정보