2016-10-03 82 views
1

如何在沒有本地跟蹤分支的情況下刪除所有遠程分支機構?如何在沒有本地跟蹤分支的情況下刪除遠程分支機構?

我有大約30個沒有本地分支(已被刪除)的遠程分支和20個跟蹤到遠程的本地分支。

我發現好幾篇關於如何做相反的文章。

編輯:尋找一個單線來解決這個問題,以便我不需要手動刪除這些分支一個接一個。

+0

可能重複[如何從本地和遠程刪除Git分支?](http://stackoverflow.com/questions/2003505/how-to-delete-a-git-branch-both-locally-and-遠程) – Makoto

+0

雖然重複會談有關本地刪除,但它也非常清楚地談論遠程刪除。 – Makoto

+0

@Makoto是的,它處理遙控器,但只討論當你想同時刪除兩個。我的當地人已被刪除。 – Bradford

回答

1
branch_not_delete=("master" "develop") 

for branch in `git for-each-ref refs/remotes/origin --format '%(refname:short)' | grep -v HEAD`; do 
    branch_name="$(gawk '{gsub("origin/", "");print}' <<< $branch)" 
    local_exists="$(git rev-parse --verify $branch_name 2> /dev/null)" 

    if [[ -z "${local_exists// }" ]]; then 
     if ! [[ " ${branch_not_delete[*]} " == *" $branch_name "* ]]; then 
     read -p "Would you like to delete $branch_name (yes/no) [no]: " yesno 
     yesno=${yesno:-no} 
     if [[ "$yesno" == "yes" ]]; then 
      git push origin :$branch_name 
     fi 
     fi 
    fi 
done 

https://stackoverflow.com/a/38776671/5399371

與@託雷克的很好的建議更新修改。

+1

小改進:替換'git branch -a | grep remotes' with'git for-each-ref refs/remotes/origin --format'%(refname:short)''(你仍然需要從每個名字中刪除'origin /')。 – torek

相關問題