使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
Schleis的变种不适合我(Ubuntu 12.04),所以让我提出我的变种(清晰而闪亮:):
变体1(我更喜欢这个选项):
git for-each-ref --format='%(refname:short) %(upstream)' refs/heads/ | awk '$2 !~/^refs\/remotes/' | xargs git branch -D
版本2:
管制:
comm -23 <( git branch | grep -v "/" | grep -v "*" | sort ) <( git br -r | awk -F '/' '{print $2}' | sort ) | awk '{print "git branch -D " $1}'
b.移除分支:
comm -23 <( git branch | grep -v "/" | grep -v "*" | sort ) <( git br -r | awk -F '/' '{print $2}' | sort ) | xargs git branch -D
其他回答
不知道如何一次性完成,但是git git branch -d <branchname>只会在完全合并的情况下删除本地分支。注意小写的d。
git branch -D <branchname>(注意大写D)将删除本地分支,无论其合并状态如何。
你可以通过一些简单的操作来做到这一点:
输出你所有的分支到一个临时文件:
git branch > branches.tmp
打开文件并删除分支以排除它们从本地删除(分支如develop/master/main/…) 通过cat命令将分支名称传递给xargs并删除分支:
cat branches.tmp | xargs git branch -D
Schleis的变种不适合我(Ubuntu 12.04),所以让我提出我的变种(清晰而闪亮:):
变体1(我更喜欢这个选项):
git for-each-ref --format='%(refname:short) %(upstream)' refs/heads/ | awk '$2 !~/^refs\/remotes/' | xargs git branch -D
版本2:
管制:
comm -23 <( git branch | grep -v "/" | grep -v "*" | sort ) <( git br -r | awk -F '/' '{print $2}' | sort ) | awk '{print "git branch -D " $1}'
b.移除分支:
comm -23 <( git branch | grep -v "/" | grep -v "*" | sort ) <( git br -r | awk -F '/' '{print $2}' | sort ) | xargs git branch -D
当遥控器本身不再存在时,我没有发现这里的答案有用。 我一直看到不存在的遥控器分支,但没有找到一个git命令来删除它们。
对我来说,解决方案是转到.git\refs\remotes目录,直接删除不再相关的文件。文件结构很容易理解。它与git branch -r的结构相同。
您可以使用该命令:
git branch --merged master | grep -v "\* master" | xargs -n 1 git branch -d
Git清洁:删除已经合并的分支,包括分解命令