Answers:
使用以下命令删除PREFIX
远程服务器上所有带前缀的分支。
git branch -r | awk -F/ '/\/PREFIX/{print $2}' | xargs -I {} git push origin :{}
您可能需要先进行试运行,看看是否要删除其分支:
git branch -r | awk -F/ '/\/PREFIX/{print $2}'
git branch -r | awk -F/ '/\/APR/{print $2}'
,您是否可以看到列出的所有APR前缀分支名称?
git branch -r | awk -F/ '/\/PREFIX/{print $2"/"$3}' | xargs -I % git push origin --delete %
如果您喜欢一种更简单的方法,例如删除3或4个分支:
git push origin --delete <branch1> <branch2> <branch3>
重要:仅适用于Git v1.7.0及更高版本。
git branch -r | awk -F/ '/\/PATTERN/{print $2}' | xargs git push origin --delete
感谢Neevek提供出色而优雅的解决方案!
但是由于awk
字段分隔符/
(-F
选项),我在分支名称中使用斜杠遇到了一些麻烦(我正在使用Git Flow )
因此,我的解决方案基于Neevek,但是可以使用正确解析分支名称/
。在这种情况下,我认为您的遥控器叫origin
。用于删除名称以星号开头的远程分支的命令PATTERN
:
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}' | xargs -I {} git push origin :{}
而且不要忘了检查要删除的内容:
git branch -r | awk -Forigin/ '/\/PATTERN/ {print $2}'
有用的提示:如果您的分支名称(无origin/
前缀)存储在文本文件中(每行一个分支名称),请运行:
cat your_file.txt | xargs -I {} git push origin :{}
xargs -a file -L
代替cat file | xargs
。更简单xargs -a file git push --delete origin
。
这可能是重复的答案,但经过测试并非常适合我。
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'功能/.*'| xargs -I {} git push origin:{}
Neevek的解决方案很好,但是可以更好:提议的解决方案每个分支调用一次“ git push”,这意味着要删除每个分支的额外网络往返。由于无论如何都在使用awk,为什么不使用它在':'前面加上前缀,然后xargs可以只调用一次'git push'并立即删除所有分支:
空运行以列出将要删除的分支:
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}'
最终推动删除的最终解决方案:
git branch -r | awk -F/ '/\/PREFIX/{print ":" $2}' | xargs git push origin
xargs: replstr may not be empty
Neevek的解决方案,也许是git版本。。git version 1.9.5
但这对我很有用。多亏了你们两个
资源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
多亏了Steve和Neevek,我发现了一个非常适合我的解决方案,我认为值得分享:
史蒂夫(Steve)的解决方案对我做了一点点调整。我的遥控器已命名,origin/feature/some-feature-name
因此我修剪了您的awk
:
git branch -r | awk -Forigin/ '/\/feature/ {print $2 $3}' | xargs -I {} git push origin :{}
现在正在执行一个不错的删除流程:
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
但是,我想知道是否有人对更优雅的解决方案有任何想法,可能会输出如下内容(我的CLI脚本非常差,所以我需要花点时间才能弄清楚):
git push origin :feature/search-min-chars :feature/search-placeholder :feature/server-error-message :feature/six-point-asterisk
这将产生一个网络请求的单个输出:
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
每个人都在使用awk
,不确定为什么。我觉得那更复杂。这是我用来删除遥控器上所有远程分支的方法fork
:
$ git branch -r --list 'fork/*' | sed 's/fork\///' | xargs git push --delete fork
扔在一grep
之间xargs
和sed
如果需要过滤列表下降到仅远程分支机构的一个子集。
origin/blaprefix_anotherbla
。但是使用sed
处理得很好。这种方法的另一个优点是,我使用bitbucket,并且不需要为每个分支删除手动输入身份验证密码。这确实删除了一个批次中的所有分支。
git branch -r | egrep 'origin/greenkeeper' | sed 's/origin\///' | xargs -I {} git push origin --delete {}
Github还有一个不错的UI和机制,可以快速删除分支,那就是您宁愿使用UI
我无法使用awk,因为我们在分支的名称中使用了斜杠结构。
git branch -r | grep "origin/users/YOURNAME" | sed -r 's/^.{9}//'| xargs -i sh -c 'git push origin --delete {}'
这将获取所有远程分支,仅获取单个用户的分支,远程“ origin /”字符串,并对每个分支执行删除。
空运行:
git branch -r --list 'origin/your-branch-name/*' | sed "s/origin\///" | xargs -I {} echo {}
删除远程分支:
git branch -r --list 'origin/your-branch-name/*' | sed "s/origin\///" | xargs -I {} git push origin --delete {}
仅删除完全合并的远程分支:
git branch -r --merged --list 'origin/your-branch-name/*' | sed "s/origin\///" | xargs -I {} git push origin --delete {}
说明:
sed "s/origin\///"
将从origin/
分支名称中删除。不剥夺我得到:remote ref does not exist
先前的答案帮助我从2018年删除了所有发行分支。我在Windows 10命令提示符下运行了此分支。我已经安装了clink,所以类似Linux的命令对我有用。
空运行:
git branch -a | grep -o "release-.*2018" | xargs -I {} echo {}
如果空运行显示分支不在远程/原点。在git prune命令下面运行以修复并再次检查。
git remote prune origin
对以上结果感到满意后,请删除:
git branch -a | grep -o "release-.*2018" | xargs -I {} git push origin --delete {}
如果看到:error: unable to delete 'release-...2018': remote ref does not exist
。然后运行前面的prune命令,然后重试。
我认为删除远程分支的方式是最好的。
git branch -r | grep -v master | sed 's/origin\//:/'| xargs git push
$ git branch -r | awk -F/ '/\/APR/{print $2}' | xargs -I {} git push origin :{} error: unable to push to unqualified destination: APR-04-DPH The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. error: failed to push some refs to 'GIT_URL'