[英]List branches not merged to their upstream
我想要一个类似于git branch
的命令,它将列出所有未与其上游合并的本地分支。
这是git branch
知道的,因为git branch -d <branch-name>
对于未合并的分支将失败。
你在找这个:
git branch --no-merged
上面的命令将列出所有未合并到当前分支的分支。 如果你需要检查其他分支那么
git branch --no-merged master
您还可以通过指定-r标志和要检查的ref来比较上游分支,可以是本地或远程:
git branch -r --no-merged origin/master
据我所知,没有单一的内置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}
如果两个条件都已验证,请打印分支的名称。
git for-each-ref
有一个“上游”字段,可以显示分支是否与其上游最新。 然后,您可以过滤其输出以仅显示其上游之前的输出:
$ git for-each-ref --format='%(upstream:trackshort)..%(refname:short)' | awk -F '\\.\\.' '$1~/>/{print $2}'
这会跳过没有上游的分支,如果不是你需要的话,修改过滤器( $1
为空,然后在awk记录中)。 ".."
用于分隔符,因为您不能在引用名称中包含序列
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.