我有很多Git分支。如何删除已经合并的分支?有没有一种简单的方法可以把它们全部删除,而不是逐个删除?
发布于 2011-05-26 00:40:19
更新:
如果您的工作流将其他分支作为可能的祖先,则可以添加要排除的其他分支,如master和dev。通常我是从一个"sprint-start“标签分支出来的,master、dev和qa都不是祖先。
首先,列出在remote中合并的本地跟踪分支(您可以考虑使用-r标志来列出其他答案中建议的所有远程跟踪分支)。
git branch --merged
您可能会看到一些不想删除的分支。我们可以添加几个参数来跳过我们不想删除的重要分支,比如master或develop。以下命令将跳过主分支和其中包含dev的所有内容。
git branch --merged| egrep -v "(^\*|master|main|dev)"
如果您想跳过,可以将其添加到egrep命令中,如下所示。分支skip_branch_name
不会被删除。
git branch --merged| egrep -v "(^\*|master|main|dev|skip_branch_name)"
要删除已合并到当前检出分支中的所有本地分支,请执行以下操作:
git branch --merged | egrep -v "(^\*|master|main|dev)" | xargs git branch -d
您可以看到,master和dev被排除在外,以防它们是祖先。
您可以使用以下命令删除合并的本地分支:
git branch -d branchname
如果未合并,请使用:
git branch -D branchname
要从远程使用中删除它,请执行以下操作:
git push --delete origin branchname
git push origin :branchname # for really old git
从遥控器中删除分支后,可以使用以下命令修剪以消除远程跟踪分支:
git remote prune origin
或者,按照另一个答案的建议,使用以下方法修剪单个远程跟踪分支:
git branch -dr branchname
发布于 2014-02-18 23:08:26
我只是稍微扩展一下Adam的答案:
通过运行git config -e --global
将其添加到Git配置中
[alias]
cleanup = "!git branch --merged | grep -v '\\*\\|master\\|develop' | xargs -n 1 -r git branch -d"
然后,您可以删除执行简单git cleanup
的所有本地合并分支。
发布于 2014-07-04 00:18:35
您将希望从这些命令中排除master
、main
和develop
分支。
本地git清除:
git branch --merged | grep -v '\*\|master\|main\|develop' | xargs -n 1 git branch -d
远程git清除:
git branch -r --merged | grep -v '\*\|master\|main\|develop' | sed 's/origin\///' | xargs -n 1 git push --delete origin
同步远程分支的本地注册表:
git fetch -p
https://stackoverflow.com/questions/6127328
复制相似问题