【发布时间】:2014-08-04 10:18:25
【问题描述】:
我有一个非常大的功能分支。在我们的代码中有很多挥之不去的 TODO cmets,但我想在尚未合并到 master 的提交上找到所有添加到代码中的 TODO(尚未删除)。我该怎么办?
【问题讨论】:
我有一个非常大的功能分支。在我们的代码中有很多挥之不去的 TODO cmets,但我想在尚未合并到 master 的提交上找到所有添加到代码中的 TODO(尚未删除)。我该怎么办?
【问题讨论】:
您可以简单地将您的分支与输出中的 TODO 和 grep 进行比较
git diff master..branch | grep "^+.*TODO"
假设 TODO 行中有足够的上下文,这对我很有用。
【讨论】:
您可以将其用作 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。
[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
【讨论】:
export GIT_WORK_TREE=$(pwd); \ ,在 [ $GIT_PREFIX ] && cd $GIT_PREFIX 之前
git grep 可以在给定的树上执行文本搜索。 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
【讨论】: