我想删除在输出中列出的所有分支...
$ git branch
...但保留当前分支,只需一步。这是否可能?如果是,怎么做?
我想删除在输出中列出的所有分支...
$ git branch
...但保留当前分支,只需一步。这是否可能?如果是,怎么做?
$ git branch | grep -v "master" | xargs git branch -D
将删除除主分支外的所有分支(将主分支替换为您想要保留的分支,但这样会删除主分支)
grep -v ^*
。 - Schwernmaster-copy
的分支。 - mvallebrgrep -v "^ *master$"
。 - Brad Kochgrep -v "master\|my-other-branch"
。 - Derek Soike首先(切换到您想要保留的分支 > 例如:主分支):
git checkout master
第二步(确保你在主分支上):
git branch -D $(git branch)
如果您使用的是PowerShell,请使用以下命令:
git branch -D $(git branch).Trim()
git branch -D $(git branch).Trim()
。此命令将删除当前分支,但要小心使用,因为它将永久丢失该分支上的未合并更改。 - Nato Boramgit branch -D \
git branch`` - KhogaEslam根据@pankijs的回答,我创建了两个git别名:
[alias]
# Delete all local branches but master and the current one, only if they are fully merged with master.
br-delete-useless = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -d;\
}; f"
# Delete all local branches but master and the current one.
br-delete-useless-force = "!f(){\
git branch | grep -v "master" | grep -v ^* | xargs git branch -D;\
}; f"
在~/.gitconfig
中添加:
如@torek所指出的:
请注意,小写的
-d
将不会删除尚未完全合并的分支(请参阅文档)。 使用-D
将删除这样的分支,即使这导致提交被“丢失”; 要非常小心地使用此选项,因为它还会删除分支reflogs,所以通常的“从意外删除中恢复”操作也无法正常工作。
基本上,如果您不确定不会丢失任何重要内容,请永远不要使用-force
版本。因为它将永久丢失。
git branch branchname commitid
来重新创建指向特定提交的分支。 - pqnet删除除了一个特定分支外的所有分支:
git branch | grep -v "branch name" | xargs git branch -D
删除除 develop 和 master 以外的所有本地分支。git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
对于 Windows 系统,在 Powershell 中使用:
git branch | %{ $_.Trim() } | ?{ $_ -ne 'master' } | %{ git branch -D $_ }
git branch -D @(git branch | select-string -NotMatch "master" | Foreach {$_.Line.Trim()})
一步删除除当前分支外的所有分支:
git branch | grep -v $(git rev-parse --abbrev-ref HEAD) | xargs git branch -D
git branch -d
(或-D
)允许使用多个分支名称,但是自动提供“除我现在所在的分支之外所有本地分支”有点棘手,需要至少写一点代码。
“最佳”(正式正确)方法是使用git for-each-ref
获取分支名称:
git for-each-ref --format '%(refname:short)' refs/heads
但是要确定你在哪个分支上就更难了(如果你想编写一个花哨的脚本,那么 git symbolic-ref HEAD
是“正式正确”的方法)。
更方便的方法是使用 git branch
,它会打印出你的本地分支名称,并在名称前加上两个空格或(对于当前分支)一个星号*
。因此,运行一些命令来删除带有*
版本的字符,你将得到用空格分隔的分支名称,然后可以将其传递给 git branch -d
命令:
git branch -d $(git branch | grep -v '^*')
或者:git branch | grep -v '^*' | xargs git branch -d
请注意,小写字母-d
不会删除"未完全合并"的分支(请参阅文档)。 使用-D
将删除这些分支,即使这导致提交被“丢失”; 请非常小心使用此选项,因为它也会删除分支reflog,因此通常的“从意外删除中恢复”操作也无法正常工作。
git branch -D $(git branch | grep -v '^*')
。 - Pratik Singhal删除所有已合并的分支(除了当前分支-v‘*’
):
git branch --merged | grep -v '*' | xargs git branch -D
我还为代码库的完全清理编写了以下命令:
alias git-clean="git branch | grep -v '*' | grep -v 'master' | xargs git branch -D && git reset --hard && git clean -d -x -f"
引自此处。
删除本地所有已合并的分支:
git branch -D `git branch --merged | grep -v \* | xargs`
删除除了 特定分支 之外的所有分支:
git branch | grep -v "branch name" | xargs git branch -D
git branch | grep -v "develop" | grep -v "master" | xargs git branch -D
我使用这个命令是因为它让我更有选择地决定不想删除的分支。下面的命令会删除除了 master 分支、develop 分支和当前分支以外的所有分支。
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
~/.zshrc
文件中。delete_branches() {
BRANCHES=$(git branch | egrep -v "(master|develop|\*)" | xargs git branch -D)
echo $BRANCHES
}
alias cleanup_branches=delete_branches