我想要一个类似于git branch
的命令,它会列出所有本地分支,这些分支未与他们的上游合并。
这是git branch
知道的内容,因为git branch -d <branch-name>
对于未合并的分支将失败。
答案 0 :(得分:2)
你在找这个:
git branch --no-merged
上面的命令将列出所有未合并到当前分支的分支。如果你需要检查其他分支,那么
git branch --no-merged master
您还可以通过指定-r标志和要检查的ref来比较上游分支,可以是本地或远程:
git branch -r --no-merged origin/master
答案 1 :(得分:1)
据我所知,没有一个内置的Git命令可以列出其上游分支后面的所有本地分支(如果有的话)。但是,您可以使用现有的Git命令实现所需的功能。见下文。
#!/bin/sh
# git-bbu.sh
#
# List the local Branches Behind their Upstream branch, if any.
#
# Usage: git bbu
#
# To make a Git alias called 'bbu' out of this script,
# put the latter on your search path, and run
#
# git config --global alias.bbu \
# '!sh git-bbu.sh'
if [ $# -ne 0 ]; then
printf "%s\n\n" "usage: git bbu"
exit 1
fi
git for-each-ref --format='%(refname:short)' refs/heads | \
while read ref; do
if (git rev-parse --verify --quiet "$ref"@{upstream} &&
! git diff --quiet "$ref"..."$ref"@{upstream}) \
>/dev/null 2>&1; then
printf "%s\n" "$ref"
fi
done
运行
git for-each-ref --format='%(refname:short)' refs/heads
列出所有本地分支(为什么不在此处使用git branch
?因为,在脚本中,您应该尝试使用管道Git命令而不是瓷器命令)。将其传递给while
循环,并为每个这样的本地分支
使用
检查本地分支是否有上游分支git rev-parse --verify --quiet "$ref"@{upstream}
使用(逻辑否定)
检查本地分支是否在其上游分支之后git diff --quiet "$ref"..."$ref"@{upstream}
如果两个条件都经过验证,请打印分支的名称。
答案 2 :(得分:0)
git for-each-ref
有一个&#34;上游&#34;字段,可以显示分支是否与其上游最新。然后,您可以过滤其输出以仅显示超出其上游的那些:
$ git for-each-ref --format='%(upstream:trackshort)..%(refname:short)' | awk -F '\\.\\.' '$1~/>/{print $2}'
这会跳过没有上游的分支,如果过滤器不是您需要的,则修改过滤器($1
为空,然后在awk记录中)。 ".."
用作分隔符,因为您不能使用引用名称