簡體   English   中英

獲取跟蹤給定遠程分支的本地分支的名稱

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

https://git-scm.com/docs/git-for-each-ref

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM