不再在远程删除本地分支
是否有一种简单的方法可以删除所有没有远程等效的本地分支?
例:
分支机构(本地和远程)
在本地,我只有一个主分支。 现在我需要处理bug-fix-a,所以我检查一下,处理它,并将更改推送到远程。 接下来,我对bug-fix-b也做了同样的处理。
分支机构(本地和远程)
现在我有本地分支机构主,bug-fix-a,bug-fix-b。 主分支维护人员会将我的更改合并到主数据库中,并删除他已合并的所有分支。
所以现在的状态是:
分支机构(本地和远程)
现在我想调用一些命令来删除分支(在这种情况下是bug-fix-a,bug-fix-b),它们不再在远程存储库中表示。
它会像现有的命令git remote prune origin
,但更像git local prune origin
。
git remote prune origin
跟踪不在远程的分支。
git branch --merged
列出已合并到当前分支中的分支。
xargs git branch -d
删除标准输入中列出的分支。
小心删除由git branch --merged
列出的git branch --merged
。 该列表可能包括您不希望删除的master
或其他分支。
为了让您有机会在删除分支之前编辑列表,您可以在一行中执行以下操作:
git branch --merged >/tmp/merged-branches && vi /tmp/merged-branches && xargs git branch -d </tmp/merged-branches
命令后
git fetch -p
在运行时删除远程引用
git branch -vv
它会显示'已经'作为远程状态。 例如,
$ git branch -vv
master b900de9 [origin/master: behind 4] Fixed bug
release/v3.8 fdd2f4e [origin/release/v3.8: behind 2] Fixed bug
release/v3.9 0d680d0 [origin/release/v3.9: behind 2] Updated comments
bug/1234 57379e4 [origin/bug/1234: gone] Fixed bug
所以你可以编写一个简单的脚本来删除已经使用遥控器的本地分支:
git fetch -p && for branch in `git branch -vv | grep ': gone]' | awk '{print $1}'`; do git branch -D $branch; done
大多数这些答案实际上并没有回答原来的问题。 我做了一堆挖掘工作,这是我找到的最干净的解决方案。 这是一个稍微更彻底的答案:
git checkout master
git fetch -p && git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d
git fetch -p && git branch -vv | awk '/: gone]/{print $1}' | xargs git branch -d
说明:
通过修剪你的跟踪分支,然后删除本地的,显示他们在git branch -vv
中“走出去”。
笔记:
如果你的语言设置为英语以外的东西,你将需要改变gone
到合适的词。 只有本地的分支不会被触及。 已在远程删除但未合并的分支将显示通知,但不会在本地删除。 如果你想删除这些以及将-d
改为-D
。