切到主干分支develop,更新远程分支

November 7, 2014 · View on GitHub

#!/bin/bash

echo ''; echo ''; echo -e '\t分支清理'; echo '*'; echo ''; echo '';

切到主干分支develop,更新远程分支

git checkout develop && git remote update --prune;

清理本地分支

read -p "是否清理远程已经合并的本地分支?[y/n]"cleanlocal;if[["是否清理远程已经合并的本地分支?[y/n]" clean_local; if [[ clean_local =~ ^[Yy]$ ]]; then # 清理本地已merge的分支 git branch --merged | grep -v "master\|develop" | xargs -n 1 git branch --delete; echo "本地清理完毕。。。。"; echo ''; fi

清理远程已经合并分支

read -p "是否清理远程已经合并的分支?[y/n]"cleanremotemerged;if[["是否清理远程已经合并的分支?[y/n]" clean_remote_merged; if [[ clean_remote_merged =~ ^[Yy]$ ]]; then # 获取远程已经merge的分支 remote_merged_branches=git branch -r --merged | grep -v "master\\|develop";

echo -e '\t\t-------已合并分支------'
for branch_info in $remote_merged_branches; do
    echo $branch_info;
    echo -e `git log -1 $branch_info --pretty=format:'%C(yellow)%h%Creset -%C(yellow)%d%Creset %Cgreen(%cr)%Creset %C(red)%ci %C(bold blue)<%an>%Creset %C(white)%s' --abbrev-commit --date=short`;

    read -p $"[已合并分支] -是否删除该远程分支 $branch_info ?[y/n]" remove_merged
    if [[ $remove_merged =~ ^[Yy]$ ]]; then
        read -p $"删除前是否查看分支 $branch_info 提交历史?[y/n]" check_log;
        if [[ $check_log =~ ^[Yy]$ ]]; then
            git log $branch_info --graph --pretty=format:'%C(yellow)%h%Creset \
                -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \
                --abbrev-commit --date=short
        fi

        read -p $"确认删除分支 $branch_info? [y/n]" confirmed;
        if [[ $confirmed =~ ^[Yy]$ ]]; then
            echo $branch_info | sed -e 's/origin\//:/' | xargs git push origin;
            # echo $branch_info | sed -e 's/origin\//:/' | xargs echo;
        fi
    fi
    echo '';
done

echo "远程已合并分支清理完毕。。。。";
echo '';

fi

清理远程未合并分支

read -p "是否清理远程未合并的分支?[y/n]"cleanremotemerged;if[["是否清理远程未合并的分支?[y/n]" clean_remote_merged; if [[ clean_remote_merged =~ ^[Yy]]]; then # 获取远程未merge的分支 remote_no_merged_branches=`git branch -r --no-merged | grep -v "master\\|develop"`; echo -e '\t\t-------未合并分支------' for branch_info inremote_no_merged_branches; do echo branchinfo;echoegitlog1branch_info; echo -e `git log -1 branch_info --pretty=format:'%C(yellow)%h%Creset -%C(yellow)%d%Creset %Cgreen(%cr)%Creset %C(red)%ci %C(bold blue)<%an>%Creset %C(white)%s' --abbrev-commit --date=short`;

    read -p $"[未合并分支] -是否删除该远程分支 $branch_info ?[y/n]" remove_merged
    if [[ $remove_merged =~ ^[Yy]$ ]]; then
        read -p $"删除前是否查看分支 $branch_info 提交历史?[y/n]" check_log;
        if [[ $check_log =~ ^[Yy]$ ]]; then
            git log $branch_info --graph --pretty=format:'%C(yellow)%h%Creset \
                -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' \
                --abbrev-commit --date=short
        fi

        read -p $"确认删除分支 $branch_info? [y/n]" confirmed;
        if [[ $confirmed =~ ^[Yy]$ ]]; then
            echo $branch_info | sed -e 's/origin\//:/' | xargs git push origin;
            # echo $branch_info | sed -e 's/origin\//:/' | xargs echo;
        fi
    fi
    echo '';
done

echo "远程未合并分支清理完毕。。。。";
echo '';

fi

echo "分支清理完毕!"