我有一个feature分支变得很大,代码中有很多TODO注解,但我希望找到所有添加到代码中(并且还没有删除)的TODO,这些TODO都是关于还没有合并到master中的提交的,我该怎么做呢?
6vl6ewon1#
您只需在输出中比较分支与master和grep的TODO
git diff master..branch | grep "^+.*TODO"
假设TODO行中有足够的上下文,这对我来说非常有效。
kgqe7b3p2#
您可以将其用作Git别名:
git --no-pager diff -U0 master | \ grep '^+.*TODO' | \ sed 's/^+//' | \ git --no-pager grep -nFf - 2> /dev/null
它显示了当前分支添加/修改的TODO行(与master相比),但在使用它之前必须先使用git add(因为git grep)。如果将其添加到status别名中,则会更加有用,这样您就可以确保在看到状态时没有剩余的TODO。
master
git add
git grep
status
[alias] s = "!sh -c ' \ [ $GIT_PREFIX ] && cd $GIT_PREFIX; \ git status --short --branch $*; \ git --no-pager diff -U0 master | \ grep \"^+.*TODO\" | \ sed \"s/^+//\" | \ git --no-pager grep -nFf - 2> /dev/null' -"
输出示例:
$ git s ## my-branch...origin/my-branch [ahead 2] M README.adoc README.adoc:12: // TODO: Add screencast README.adoc:26: // TODO: Advertise Asciidoctor
rxztt3cl3#
git grep可以在给定的树上执行文本搜索。git branch --no-merged $commit提供了所有未合并到指定提交中的分支。将两者结合起来,您就可以开始了(我知道,您不应该在脚本中使用git branch,但我无法快速找到一种方法来告诉git for-each-ref只考虑未合并的引用。如果有人有解决方案,请随时评论/编辑)
git branch --no-merged $commit
git branch
git for-each-ref
git branch --no-merged master | cut -c3- | while read branch; do git grep 'TODO' "$branch" done
3wabscal4#
合并以上两个答案,我编写这段代码来显示HEAD提交中的TODO。
git --no-pager diff -U0 HEAD^..HEAD | grep -o 'TODO.*$' | xargs -I{} git --no-pager grep -wn -P '{}$' 2>/dev/null
4条答案
按热度按时间6vl6ewon1#
您只需在输出中比较分支与master和grep的TODO
假设TODO行中有足够的上下文,这对我来说非常有效。
kgqe7b3p2#
您可以将其用作Git别名:
它显示了当前分支添加/修改的TODO行(与
master
相比),但在使用它之前必须先使用git add
(因为git grep
)。如果将其添加到
status
别名中,则会更加有用,这样您就可以确保在看到状态时没有剩余的TODO。输出示例:
rxztt3cl3#
git grep
可以在给定的树上执行文本搜索。git branch --no-merged $commit
提供了所有未合并到指定提交中的分支。将两者结合起来,您就可以开始了(我知道,您不应该在脚本中使用git branch
,但我无法快速找到一种方法来告诉git for-each-ref
只考虑未合并的引用。如果有人有解决方案,请随时评论/编辑)3wabscal4#
合并以上两个答案,我编写这段代码来显示HEAD提交中的TODO。