微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何在 glob 上 git branch <branchname>

如何解决我如何在 glob 上 git branch <branchname>

我正在尝试跑步:

git branch -D bugfix/* 

删除所有具有相同前缀的多个分支,但它返回

zsh: no matches found: bugfix/

如何匹配此命令的正则表达式?

解决方法

首先,我会检查并确保我的正则表达式针对正确的分支:

git branch | grep "bugfix/"

其次,在确认返回预期分支后,删除它们:

git branch | grep "bugfix/" | xargs git branch -D

,

(我真的不认为您需要下面的内容,但除了其他答案之外,它可能会更清楚地了解与 git 相关的脚本。)

git branch 是一个高级的、瓷器的命令,它不是为在脚本中使用或由其他命令使用而设计的(尽管您可以以任何方式对其进行管道传输,并且 {{1} } 就是其中之一)。您可以改用 git for-each-ref。此外,您的模式非常适合它,因此您无需使用 grep。您只需要:

grep

此命令生成所有以 git for-each-ref --format='%(refname)' refs/heads/bugfix 开头的引用(例如,refs/heads/bugfix/ 将不匹配模式(但不确定 Windows))。在内部,您可以通过其内部名称来引用任何分支,例如本地 refs/heads/bugfiX(如果没有歧义则更短 ref/heads/master)或远程 heads/master(或 ref/remotes/origin/master)等。在没有引用参数的情况下运行 remotes/origin/master 将生成所有引用,因此您可以检查所有引用,并查看它们都遵循的模式。

另一个在 git 中更新引用的低级管道命令是 git update-ref,它允许在低级操作引用,其中可以使用 git for-each-ref 开关删除引用:

-d

将上述命令组合成一个管道命令就像:

git update-ref -d refs/heads/bugfix/foo

git for-each-ref --format='%(refname)' refs/heads/bugfix | xargs -I{} git update-ref -d {}

(while read -r REF; do echo "rm $REF $(git rev-parse $REF)"; git update-ref -d "$REF"; done < <(git for-each-ref --format='%(refname)' refs/heads/bugfix) -I{} 需要使 {} 为每个引用运行 xargs,因为 git update-ref 最多可以使用一个引用,除非使用git update-ref 选项。)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。