2016-10-03 3 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' с 'git for-each-ref refs/remotes/origin -format '% (refname: short)'' (вам все равно нужно удалить 'origin /' от каждого имени). – torek

Смежные вопросы