我有一个团队成员,他无意中将150多个当地分支机构推到了我们的中央仓库.值得庆幸的是,它们都具有相同的前缀.使用该前缀,是否有一个git命令或酷的小shell脚本,我可以使用它将立即删除所有这些?
nee*_*vek 133
使用以下命令删除PREFIX
远程服务器上具有前缀的所有分支.
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
Run Code Online (Sandbox Code Playgroud)
你可能想先做一个干运行,看看它是否是你要删除的分支:
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
Run Code Online (Sandbox Code Playgroud)
小智 88
如果您喜欢更简单的方法,例如删除3或4个分支:
git push origin --delete <branch1> <branch2> <branch3>
Run Code Online (Sandbox Code Playgroud)
重要提示:仅适用于Git v1.7.0及更高版本.
Dmi*_*riy 31
感谢Neevek提供优质而优雅的解决方案!
但是我在分支名称中使用斜杠有一些麻烦(我正在使用Git Flow),因为awk
字段分隔符/
(-F
选项)
所以我的解决方案基于Neevek,但正确解析分支名称/
.在这种情况下,我假设您的远程调用origin
.用于删除名称的远程分支的命令PATTERN
:
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}' | xargs -I {} git push origin :{}
Run Code Online (Sandbox Code Playgroud)
并且不要忘记检查要删除的内容:
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}'
Run Code Online (Sandbox Code Playgroud)
有用的提示:如果你的分支名称(没有origin/
前缀)存储在一个文本文件中(每行一个分支名称),只需运行:
cat your_file.txt | xargs -I {} git push origin :{}
Run Code Online (Sandbox Code Playgroud)
Kir*_*rby 13
与grep相同:
git branch -r | grep -Eo 'PREFIX/.*' | xargs -i git push origin :{}
.
branch -r
节目origin/prefix/branchname
.所以它需要prefix/branchname
.
lac*_*ack 10
Neevek的解决方案很优雅,但它可以更好:建议的解决方案每个分支调用一次"git push",这意味着要删除每个分支的额外网络往返.既然你还在使用awk,为什么不用它来加上':'前缀,然后xargs可以只调用'git push'一次并立即删除所有分支:
Dry-run列出要删除的分支:
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}'
Run Code Online (Sandbox Code Playgroud)
实际推送删除的最终解决方案:
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}' | xargs git push origin
Run Code Online (Sandbox Code Playgroud)
资源https://coderwall.com/p/eis0ba
1 - List all your remote branches:
$ git branch -r
2 - Filter the branches by some regular expression. In this case I'm interested in deleting any branch with the 'feature-' prefix:
$ git branch -r | awk -F/ '/\/feature-/{print $2}'
3 - Pipe the last command to git push to delete them:
# **Edit** - Removed extra colon, which is not needed
$ git branch -r | awk -F/ '/\/feature-/{print $2}' | xargs -I {} git push origin {}
4 - Grab a beer.
5 - Remove any local reference to those branches:
$ git remote prune origin
Run Code Online (Sandbox Code Playgroud)
这可能是重复的答案,但经过测试并非常适合我。
git branch -D分支名称
git push origin-删除分支名称
git branch -D分支名称1分支名称2
git push origin --delete分支名称1分支名称2
git branch -D $(git branch --list'功能/ *')
git branch -D 反引号 $(git branch --list'feature / *' 反引号)
git branch -r | grep -Eo'功能/.*'
git branch -r | grep -Eo'feature /.*'| xargs -I {} git push origin:{}
大家都在用awk
,不知道为什么。我感觉这个比较复杂。这是我用来删除fork
遥控器上所有远程分支的方法:
$ git branch -r --list 'fork/*' | sed 's/fork\///' | xargs git push --delete fork
Run Code Online (Sandbox Code Playgroud)
如果您需要将列表过滤为仅远程分支的子集,请在和grep
之间添加。xargs
sed
小智 5
感谢尼维克。为了我的目的重新配置后,效果很好:
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2 "/" $3}' | xargs -I {} git push origin :{}
Run Code Online (Sandbox Code Playgroud)
我还需要考虑文件夹结构。我的功能分支位于像 origin/feature/PREFIX-FEATURENUMBER 这样的文件夹结构中。所以我必须从 $2=folder + $3=branchname 构建我的模式。
感谢Steve和Neevek,我找到了一个非常适合我的解决方案,我认为值得分享:
史蒂夫(Steve)的解决方案对我做了一点点调整。我的遥控器已命名,origin/feature/some-feature-name
因此我修剪了您的awk
:
git branch -r | awk -Forigin/ '/\/feature/ {print $2 $3}' | xargs -I {} git push origin :{}
Run Code Online (Sandbox Code Playgroud)
现在正在执行一个不错的删除流程:
To github.com:project/project-name.git
- [deleted] feature/search-min-chars
To github.com:project/project-name.git
- [deleted] feature/search-placeholder
To github.com:project/project-name.git
- [deleted] feature/server-error-message
To github.com:project/project-name.git
- [deleted] feature/six-point-asterisk
Run Code Online (Sandbox Code Playgroud)
但是,我想知道是否有人对更优雅的解决方案有任何想法,可能会输出如下内容(我的CLI脚本非常差,所以我需要花点时间来弄清楚):
git push origin :feature/search-min-chars :feature/search-placeholder :feature/server-error-message :feature/six-point-asterisk
Run Code Online (Sandbox Code Playgroud)
这将产生一个网络请求的单个输出:
To github.com:project/project-name.git
- [deleted] feature/search-min-chars
- [deleted] feature/search-placeholder
- [deleted] feature/server-error-message
- [deleted] feature/six-point-asterisk
Run Code Online (Sandbox Code Playgroud)