[英]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.