如何删除已合并的分支?我可以一次删除所有分支,而不是逐个删除每个分支吗?
当前回答
对于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 branch -r --merged | grep -v master | sed 's/origin\//:/' | xargs -n 1 git push origin
在Git的最新版本中
git branch -r --merged | grep -v master | sed 's/origin\///' | xargs -n 1 git push --delete origin
UPDATE(通过@oliver;因为不适合注释,但已经有足够的答案了):如果您在分支ABC上,那么ABC将出现在git branch-r--merged的结果中,因为未指定分支,所以分支默认为当前分支,分支始终符合自身合并的条件(因为分支和自身之间没有区别!)。
因此,指定分支:
git branch -r --merged master | grep -v master ...
OR第一个结账主机:
git checkout master | git branch -r --merged | grep -v ...
我发现最简单的方法是只删除本地分支,而不是远程分支:
$git分支--合并|grep-v主|xargs-n 1 git分支-D
此命令将仅删除已合并到主分支中的分支。如果您不想删除其他分支(例如登台),请小心。
我最喜欢的简单脚本:
git branch --merged | grep -E -v "(master|main|develop|other)" | xargs git branch -d
如何在PowerShell控制台中删除合并的分支
git branch --merged | %{git branch -d $_.Trim()}
如果要排除master或任何其他分支名称,可以使用PowerShell Select String这样进行管道,并将结果传递给git branch-d:
git branch -d $(git branch --merged | Select-String -NotMatch "master" | %{$_.ToString().Trim()})
如果您使用的是HubFlow或GitFlow等分支模型,则可以使用此命令删除合并的功能分支:
git branch --merged | grep feature.* | grep -v "\*" | xargs -n 1 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之间的区别