使用git远程修剪原点,我可以删除不在远程上的本地分支。

但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。

我该怎么做呢?


当前回答

更短更安全的一行代码:

git branch -d $(git branch --merged | cut -c 3- | grep -v master)

在运行分支之前,请确保签出到尚未合并的分支。因为您不能删除当前签入的分支。

其他回答

虽然迟到了,但是你可以使用——no-contains选项来避免在使用branch -merged时删除你的主分支

git branch --no-contains master --merged master | xargs git branch -d

删除所有没有更新到master的分支

git co master && git branch | sed s/\*/\ / | xargs git branch -d 2> /dev/null

我已经把公认的答案变成了一个健壮的脚本。您可以在我的git-extensions存储库中找到它。

$ git-rprune --help
Remove old local branches that do not exist in REMOTE any more.
With --test, only print which local branches would be deleted.
Note: To do this automatically on each fetch / pull:
    git config --global fetch.prune true
Usage: git-rprune REMOTE [-t|--test|-f|--force] [-?|-h|--help]

当遥控器本身不再存在时,我没有发现这里的答案有用。 我一直看到不存在的遥控器分支,但没有找到一个git命令来删除它们。

对我来说,解决方案是转到.git\refs\remotes目录,直接删除不再相关的文件。文件结构很容易理解。它与git branch -r的结构相同。

似乎没有一个安全的一行代码,有太多的边缘情况(比如分支的名称中有“master”,等等)。最安全的是以下步骤:

Git分支-vv | grep 'gone]' > stale_branches.txt 查看文件并删除想要保留的分支(例如主分支!);您不需要编辑任何一行的内容 Awk '{print $1}' stale_branches.txt | xargs git branch -d