使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
使用git远程修剪原点,我可以删除不在远程上的本地分支。
但是我还想删除从这些远程分支创建的本地分支(检查它们是否未合并会很好)。
我该怎么做呢?
当前回答
git分支的Powershell版本——merged master | grep -v '^[*]*master$' | xargs git branch -d
git分支——合并主| % {if ($ _ -notmatch \ *。*主){git分支- d " $(美元_.Trim())”}}
当您在主分支上时,这将删除已合并到主分支中的任何本地分支。
Git检查主切换。
其他回答
我很确定git remote prune origin是你想要的。
你可以运行它作为git远程剪枝起源-演练,看看它会做什么不做任何改变。
修剪完成后,你可以使用git branch -r获取远程分支的列表。带有远程跟踪分支的分支列表可以使用git branch -vv检索。因此,使用这两个列表,您可以找到不在远程列表中的远程跟踪分支。
这一行应该做的把戏(需要bash或zsh,不会与标准的Bourne shell工作):
git fetch -p ; git branch -r | awk '{print $1}' | egrep -v -f /dev/fd/0 <(git branch -vv | grep origin) | awk '{print $1}' | xargs git branch -d
该字符串获取远程分支的列表,并通过标准输入将其传递给egrep。并过滤具有远程跟踪分支的分支(使用git branch -vv并过滤那些具有origin的分支),然后获得输出的第一列,这将是分支名称。最后将所有分支名称传递给delete branch命令。
由于它使用的是-d选项,所以在运行此命令时,它不会删除尚未合并到您所在分支中的分支。
这将删除已修剪远程跟踪分支的本地分支。(确保你在主分支上!)
git checkout master
git branch -vv | grep ': gone]' | awk '{print $1}' | xargs git branch -d
细节:
Git branch -vv对于远程已修剪的本地分支显示“gone”。 Mybranch abc1234 [origin/ Mybranch: gone]提交注释 -d将检查它是否已合并(-d将删除它) 错误:分支“mybranch”没有完全合并。
删除所有没有更新到master的分支
git co master && git branch | sed s/\*/\ / | xargs git branch -d 2> /dev/null
以下是@wisbucky对Windows用户的回答:
for /f "tokens=1" %i in ('git branch -vv ^| findstr ": gone]"') DO git branch %i -d
我使用posh-git,不幸的是PS不喜欢裸体for,所以我创建了一个普通的'ol命令脚本,名为PruneOrphanBranches.cmd:
@ECHO OFF
for /f "tokens=1" %%i in ('git branch -vv ^| findstr ": gone]"') DO CALL :ProcessBranch %%i %1
GOTO :EOF
:ProcessBranch
IF /I "%2%"=="-d" (
git branch %1 %2
) ELSE (
CALL :OutputMessage %1
)
GOTO :EOF
:OutputMessage
ECHO Will delete branch [%1]
GOTO :EOF
:EOF
不带参数调用它以查看列表,然后用“-d”调用它来执行实际的删除或对任何没有完全合并但无论如何都想删除的分支执行“-d”。