[英]Get the name of local branches tracking a given remote branch
我試圖找到克隆 git 存儲庫時默認哪個本地分支。
在這個特定的上下文中,我可以假設遙控器被稱為origin
。 我可以使用git symbolic-ref refs/remotes/origin/HEAD
獲取origin
的默認分支。 這將返回類似refs/remotes/origin/develop
。
我現在需要找到設置了哪些本地分支來跟蹤origin/develop
。 顯然它幾乎肯定會是develop
,所以我可以做一些字符串操作來替換remotes/origin/
並最終得到refs/heads/develop
。 但是,我想避免做出這種假設。
我目前正在從git branch -vv
的結果中提取它(特別是git rev-parse --symbolic-full-name $(git branch -vv | grep "\\[$(git rev-parse --abbrev-ref $(git symbolic-ref refs/remotes/origin/HEAD))\\]" | awk '{print $1}')
)。 但是,這非常脆弱,尤其是當分支名稱可能出現在提交消息中時。
我目前正在使用 git 2.18,但如果較新的版本具有使其更好所需的功能,則可以升級。
您還可以利用for-each-ref
格式中的%(if) %(then) [%(else)] %(end)
構造。
git for-each-ref --format="%(if:origin/<remoteBranch>)%(upstream:short)%(then)%(refname:short)%(end)" refs/heads
(作為旁注,如果您有很多分支,請通過添加| sort -u
避免空行噪音)
最后,這在別名中更方便:
git config --global alias.get-branches-pointing-to '!f() { git for-each-ref --format="%(if:equals=origin/$1)%(upstream:short)%(then)%(refname:short)%(end)" refs/heads | sort -u; }; f'
git get-branches-pointing-to <yourRemoteBranch>
git for-each-ref refs/heads --format='%(refname:short) %(upstream:short)' |
while read branch upstream; do
if [ "$upstream" == origin/master ]; then
echo branch "$branch" tracks "$upstream"
fi
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.