命令grep -v“\ *”有什么作用?

时间:2018-01-17 11:55:28

标签: git git-bash atlassian-sourcetree

我一直在用我在网上找到的命令删除我的本地分支,但是当我分析它时,我不确定grep -v“\ *”在命令行中做了什么,我删除了它仍然在做同样的事情(或者至少我是这么认为的)。我在网上找不到任何关于它的信息。另外,我发现了一个只有grep -v“*”的变体。搜索名称为“*”的分支没有意义,因为无法像那样调用它(至少在sourcetree上)

这是我一直在使用的命令。

git branch --merged | grep -v "\*" | grep -v master | grep -v develop | xargs -n 1 git branch -d

有人可以告诉我它是否重要,或者我是否可以从命令行中删除它?

2 个答案:

答案 0 :(得分:1)

它过滤输入,留下所有不包含星号的行。

来自man grep

  

-v, - 反转匹配                 反转匹配感,选择不匹配的线条。 (-v由POSIX指定。)

\*是一种匹配星号的模式。由于-v标志,这些行将从输出中删除。

在此上下文中,grep命令将过滤git branch --merged的输出。 后者输出一个分支列表,其中当前分支用星号标记。 grep -v "\*"只是从输出中删除当前分支。

最后,您的整个命令将删除除masterdevelop和当前分支之外的所有合并分支。 如果省略第一个grep,该命令将尝试删除当前已检出的分支,这将导致错误。

答案 1 :(得分:1)

git branch --merged列出合并到HEAD的分支。这是一个例子:

$ git branch --merged
  master
* test

“*”是输出的一部分,为了排除此结果,您可以使用-v选项将其反转:

echo "* master" | grep -v "\*"

将打印任何内容。

使用grep -v的下一个管道会排除包含某些关键字的更多结果,最后会删除这些分支。

总之,该命令删除合并的分支,同时保持主分支和当前分支(旁边有“*”)。