如何删除已合并的分支?我可以一次删除所有分支,而不是逐个删除每个分支吗?
当前回答
假设我有一个名为upstream的远程和一个origin(GitHub风格,我的fork是origin,upstream是upstream)。
我不想从上游删除任何主机、HEAD或任何内容。我也不想删除开发分支,因为这是我们创建PR的公共分支。
列出所有远程分支,按合并的分支进行筛选:
git branch -r
从该列表中删除包含我知道不想删除的分支名称中的单词的行:
sed '/develop\|master\|HEAD\|upstream/d'
从引用名称中删除远程名称(origin/somebranch变为somebranch):
sed 's/.*\///'
使用xargs调用单线:
xargs git push --delete origin
把所有这些都放在一起,你会得到:
git branch -r --merged | sed '/develop\|master\|HEAD\|upstream/d' | sed 's/.*\///' | xargs git push --delete origin
这将使我只剩下一些我曾经工作过但尚未合并的分支。然后,您可以逐个删除它们,因为它们不应该太多。
查找不再需要的分支:
git branch -ar
假设找到要删除的branch1、branch2和branch3:
git push --delete origin branch1 branch2 branch3
其他回答
请尝试以下命令:
git branch -d $(git branch --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))
通过使用gitrevparse,将获取当前分支名称以排除它。如果出现错误,则意味着没有要删除的本地分支。
要对远程分支执行相同操作(使用远程名称更改源),请尝试:
git push origin -vd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD) | cut -d/ -f2)
如果您有多个遥控器,请在剪切之前添加grep-origin |,以仅过滤源。
如果上述命令失败,请尝试先删除合并的远程跟踪分支:
git branch -rd $(git branch -r --merged | grep -vw $(git rev-parse --abbrev-ref HEAD))
然后git再次获取远程,并再次使用前面的gitpush-vd命令。
如果您经常使用它,请考虑将别名添加到~/.gitconfig文件中。
如果您错误地删除了一些分支,请使用gitreflog查找丢失的提交。
以下查询适用于我
for branch in `git branch -r --merged | grep -v '\*\|master\|develop'|awk 'NR > 0 {print$1}'|awk '{gsub(/origin\//, "")}1'`;do git push origin --delete $branch; done
这将过滤grep管道中的任何给定分支。
在http克隆上运行良好,但在ssh连接上运行不太好。
对于Windows,您可以使用以下命令安装Cygwin并删除所有远程分支:
git branch -r --merged | "C:\cygwin64\bin\grep.exe" -v master | "C:\cygwin64\bin\sed.exe" 's/origin\///' | "C:\cygwin64\bin\xargs.exe" -n 1 git push --delete origin
您可以使用git del br工具。
git-del-br -a
您可以使用pip安装它
pip install git-del-br
P.S:我是这个工具的作者。欢迎提出任何建议/反馈。
这也适用于删除除主分支之外的所有合并分支。
git branch --merged | grep -v '^* master$' | grep -v '^ master$' | xargs git branch -d
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的git添加?
- Rubymine:如何让Git忽略Rubymine创建的.idea文件
- Gitignore二进制文件,没有扩展名
- Git隐藏错误:Git隐藏弹出并最终与合并冲突
- 了解Git和GitHub的基础知识
- 没有。Git目录的Git克隆
- Git与Mercurial仓库的互操作性
- 忽略git中修改(但未提交)的文件?
- “git restore”命令是什么?“git restore”和“git reset”之间有什么区别?
- Git合并与强制覆盖
- Git拉另一个分支
- 在Bash命令提示符上添加git分支
- 如何更改Git日志日期格式
- git pull -rebase和git pull -ff-only之间的区别