如何删除已合并的分支?我可以一次删除所有分支,而不是逐个删除每个分支吗?
当前回答
如果您希望删除已合并的本地分支以及删除它们的远程控制器,这里是我更喜欢的一行代码:
git branch --merged | xargs -I_br -- sh -c 'git branch -d _br; git push origin --delete _br'
其他回答
git从git额外回购中删除合并的分支。
https://github.com/tj/git-extras/blob/master/Commands.md#git-删除合并的分支
我发现最简单的方法是只删除本地分支,而不是远程分支:
$git分支--合并|grep-v主|xargs-n 1 git分支-D
此命令将仅删除已合并到主分支中的分支。如果您不想删除其他分支(例如登台),请小心。
Windoze友好的Python脚本(因为git sweep阻塞了Wesnoth存储库):
#!/usr/bin/env python
# Remove merged git branches. Cross-platform way to execute:
#
# git branch --merged | grep -v master | xargs git branch -d
#
# Requires gitapi - https://bitbucket.org/haard/gitapi
# License: Public Domain
import gitapi
repo = gitapi.Repo('.')
output = repo.git_command('branch', '--merged').strip()
for branch in output.split('\n'):
branch = branch.strip()
if branch.strip(' *') != 'master':
print(repo.git_command('branch', '-d', branch).strip())
https://gist.github.com/techtonik/b3f0d4b9a56dbacb3afc
刚刚为此创建了python脚本:
import sys
from shutil import which
import logging
from subprocess import check_output, call
logger = logging.getLogger(__name__)
if __name__ == '__main__':
if which("git") is None:
logger.error("git is not found!")
sys.exit(-1)
branches = check_output("git branch -r --merged".split()).strip().decode("utf8").splitlines()
current = check_output("git branch --show-current".split()).strip().decode("utf8")
blacklist = ["master", current]
for b in branches:
b = b.split("/")[-1]
if b in blacklist:
continue
else:
if input(f"Do you want to delete branch: '{b}' [y/n]\n").lower() == "y":
call(f"git branch -D {b}".split())
call(f"git push --delete origin {b}".split())
注意:我对前面的回答不满意,(不在所有系统上工作,不在远程工作,不指定--merged分支,不完全过滤)。所以,我补充了我自己的答案。
主要有两种情况:
地方的
您要删除已合并到另一个本地分支的本地分支。在删除过程中,您希望保留一些重要分支,如master、develop等。
git branch --format "%(refname:short)" --merged master | grep -E -v '^master$|^feature/develop$' | xargs -n 1 git branch -d
笔记:
git分支输出--格式“..”是去除空格并允许精确的grep匹配grep-E用于代替egrep,因此它也适用于没有egrep的系统(即:git for windows)。grep-E-v“^master$|^feature/develd$”是指定我不想删除的本地分支xargs-n 1 git branch-d:执行本地分支的删除(它不适用于远程分支)当然,如果您尝试删除当前签出的分支,会出现错误。所以,我建议提前切换到master。
遥远的
您要删除已合并到另一个远程分支的远程分支。在删除过程中,您希望保留一些重要的分支,如HEAD、master、releases等。
git branch -r --format "%(refname:short)" --merged origin/master | grep -E -v '^*HEAD$|^*/master$|^*release' | cut -d/ -f2- | xargs -n 1 git push --delete origin
笔记:
对于remote,我们使用-r选项并提供完整的分支名称:origin/mastergrep-E-v'^*HEAD$|^*/master$|^*release'是为了匹配我们不想删除的远程分支。cut-d/-f2-:删除不需要的“origin/”前缀,否则将由gitbranch命令打印出来。xargs-n 1 git push--delete origin:执行远程分支的删除。
推荐文章
- git pull -rebase和git pull -ff-only之间的区别
- GitHub -致命:无法读取用户名https://github.com':没有这样的文件或目录
- 撤消git平分错误
- 使用.gitconfig配置diff工具
- 如何配置Mac OS X术语,使git有颜色?
- Visual Studio Code: .git文件夹/文件隐藏
- “node_modules”文件夹应该包含在git存储库中吗
- 为什么git-rebase给了我合并冲突,而我所做的只是压缩提交?
- 当我试图推到原点时,为什么Git告诉我“没有这样的远程‘原点’”?
- 如何从远程分支中挑选?
- 如何查看一个分支中的哪些提交不在另一个分支中?
- 如何取消在github上的拉请求?
- HEAD和master的区别
- GIT克隆在windows中跨本地文件系统回购
- RPC失败;卷度传输已关闭,剩余未完成的读取数据