如何删除已合并的分支?我可以一次删除所有分支,而不是逐个删除每个分支吗?
当前回答
在安装了gitbash的Windows上,egrep-v将无法工作
git branch --merged | grep -E -v "(master|test|dev)" | xargs git branch -d
其中grep-E-v等于egrep-v
使用-d删除已合并的分支或-D删除未合并的分支
其他回答
对于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
如何在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()})
要删除合并的分支,gitdelete合并的分支比shell黑客更健壮、更方便。它还检测重基合并和挤压合并。它的自述文件有更多细节。
假设我有一个名为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
我一直在使用以下方法在一个cmd中删除合并的本地AND远程分支。
我的bashrc文件中有以下内容:
function rmb {
current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/')
if [ "$current_branch" != "master" ]; then
echo "WARNING: You are on branch $current_branch, NOT master."
fi
echo "Fetching merged branches..."
git remote prune origin
remote_branches=$(git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$")
local_branches=$(git branch --merged | grep -v 'master$' | grep -v "$current_branch$")
if [ -z "$remote_branches" ] && [ -z "$local_branches" ]; then
echo "No existing branches have been merged into $current_branch."
else
echo "This will remove the following branches:"
if [ -n "$remote_branches" ]; then
echo "$remote_branches"
fi
if [ -n "$local_branches" ]; then
echo "$local_branches"
fi
read -p "Continue? (y/n): " -n 1 choice
echo
if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then
# Remove remote branches
git push origin `git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$" | sed 's/origin\//:/g' | tr -d '\n'`
# Remove local branches
git branch -d `git branch --merged | grep -v 'master$' | grep -v "$current_branch$" | sed 's/origin\///g' | tr -d '\n'`
else
echo "No branches removed."
fi
fi
}
原始来源
这不会删除主分支,而是删除合并的本地和远程分支。一旦你在你的rc文件中有了这个,只需运行rmb,你会看到一个合并的分支列表,这些分支将被清理并要求确认操作。您可以修改代码,不要求确认,但最好保留它。
推荐文章
- 为什么我需要显式地推一个新分支?
- 如何撤消最后的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之间的区别