我可以找到很多列出跟踪分支的答案 (这里),但我想做的是检查哪些本地分支可以安全删除,因为它们的提交已经被推送到远程仓库。
在大多数情况下,我将这些分支推送到远程仓库而它们并没有被“跟踪”,所以那部分并没有什么帮助。然而,在大多数情况下,远程分支具有相同的名称,并且应该指向相同的提交(但不总是正确的)。
似乎这应该是一个很常见的事情吧?
我可以找到很多列出跟踪分支的答案 (这里),但我想做的是检查哪些本地分支可以安全删除,因为它们的提交已经被推送到远程仓库。
在大多数情况下,我将这些分支推送到远程仓库而它们并没有被“跟踪”,所以那部分并没有什么帮助。然而,在大多数情况下,远程分支具有相同的名称,并且应该指向相同的提交(但不总是正确的)。
似乎这应该是一个很常见的事情吧?
git branch -a --contains name_of_local_branch | grep -c remotes/origin
origin
可以更改为任何远程名称。#!/bin/bash
# Find (/delete) local branches with content that's already pushed
# Takes one optional argument with the name of the remote (origin by default)
# Prevent shell expansion to not list the current files when we hit the '*' on the current branch
set -f
if [ $# -eq 1 ]
then
remote="$1"
else
remote="origin"
fi
for b in `git branch`; do
# Skip that "*"
if [[ "$b" == "*" ]]
then
continue
fi
# Check if the current branch tip is also somewhere on the remote
if [ `git branch -a --contains $b | grep -c remotes/$remote` != "0" ]
then
echo "$b is safe to delete"
# git branch -D $b
fi
done
set +f
git branch --merged origin/remotebranch
命令来列出本地分支,其指向可从remotebranch
的头部到达。 - jub0bs