git diffのgrepはファイルと行番号を表示します。

git diffのgrepはファイルと行番号を表示します。

ブランチで作業するときは、「TODO」コメントにすばやく移動したいと思います。これは意味する

  1. 私のブランチに「TODO」コメントのみを追加したいです(マスターのコメントは無視)。
  2. 各一致のファイルと行番号を表示したいと思います。

私は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

関連情報