当我在分支上工作时,我想快速跳转到我的“TODO”评论。这意味着
- 我只想要添加到我的分支上的“TODO”注释(忽略 master 中的注释)
- 我希望每个匹配项都显示文件和行号。
我知道两个部分解决方案: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
可以使用patch
git log的方式:
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
或管道 shell 命令,如sed
或awk
来过滤输出,仅查找您想要的文件或文件夹。
此外,您可以设置默认显示的行号(参见“配置”段落):
grep.lineNumber
If set to true, enable -n option by default.
可以按照不同答案中的解释进行设置这个问题,例如:
git config --global grep.lineNumber true