zoukankan      html  css  js  c++  java
  • git 合并分支sh脚本

    注意:使用前自行修改LOCAL_BRANCH,TARGET_BRANCH分支代码

    #!/bin/sh
    
    RED_COLOR='E[1;31m'  #
    GREEN_COLOR='E[1;32m' #绿
    YELOW_COLOR='E[1;33m' #
    BLUE_COLOR='E[1;34m'  #
    PINK='E[1;35m'      #粉红
    RES='E[0m'
    
    #退出程序
    function goto_exit()
    {
        echo -e "${RED_COLOR} $1 ${RES}"
        read -p "按任意键关闭" -n 1
        exit $2
    }
    
    #获取当前分支的冲突检查情况
    function check_conflict()
    {
        git --no-pager diff --check 
        if [ $? = 0 ]; then
            exit 0
        else
            echo 还有冲突未解决
            exit 1
        fi
    }
    
    #检测冲突
    function last_status()
    {
        if [ $? -eq 0 ]
        then
            return 0
        else
            #exit -2 
            goto_exit "执行异常[产生冲突或其他原因]" -2
        fi
    }
    
    #切换分支并拉取代码
    function pull_latest_branch()
    {
    #     如果有两个人共同用一个分支开发,他刚更新的代码在测试上没有问题,过一段时间测试完成了,通知运维人员可以上预发布环境了,
    #     但是这个时候该功能分支的另外一个正好又提交了一个commit,这时会把最新的版本也合并了,
    #     说了半天,才说到重要,也就是每次合并之前都会有个pull --rebase操作
    #    if git checkout $1 && git pull --rebase 
    #    then
    #        last_status
    #    fi
        if git checkout $1 && git pull
        then
            last_status
        fi
    }
    
    #拉取远程分支
    function check_branch()
    {
        if git branch | grep -q $1
        then
            return 0
        else
            echo "没有找到此分支, 现在从远程分支上拉取至本地"
            pull_latest_branch
            if git branch -rv | grep $1
            then
                git checkout -b $1 origin/$1
            fi
        fi
    }
    
    # $1表示要合并到的分支[目标分支],$2表示要合并的分支
    function merge_branch()
    {
        if git checkout $1 && pull_latest_branch $1 && git merge $2
        then
            last_status
        fi
    }
    
    # 接收一个参数,要推送的目标分支
    function push_branch()
    {
        if git push origin $1 && git status
        then
            last_status
        fi
    }
    
    function show_commit_id()
    {
        git log | head -5
    }
    
    function new_line()
    {
        echo 
    }
    
    #*********************************
    # LOCAL_BRANCH 表示功能分支
    # TARGET_BRANCH 表示要合并到的分支
    #*********************************
    
    ############################处理逻辑开始##############################
    
    if [ -n "$(git status -s)" ];then
        goto_exit "有文件变更,请先处理,再执行" -2
    fi
    
    echo 1.test2合并到main
    echo 2.test3合并到main
    read -p "请选择:" input
    case $input in
    [1])
        LOCAL_BRANCH=test2
        TARGET_BRANCH=main
    ;;
    [2])
        LOCAL_BRANCH=test3
        TARGET_BRANCH=main
    ;;
    *)
    #默认执行命令
    goto_exit "退出" -2
    esac
    
    echo -e "${RED_COLOR}当前摘取的分支是:${RES} $LOCAL_BRANCH"
    echo -e "${RED_COLOR}要合并到的分支是:${RES} $TARGET_BRANCH"
    check_branch $LOCAL_BRANCH
    new_line
    
    echo -e "拉取${GREEN_COLOR} $LOCAL_BRANCH${RES} 分支最新代码"
    pull_latest_branch $LOCAL_BRANCH
    new_line
    
    echo -e "切换到${GREEN_COLOR} $TARGET_BRANCH ${RES}分支,合并 ${GREEN_COLOR} $LOCAL_BRANCH ${RES} 分支 到 ${GREEN_COLOR} $TARGET_BRANCH ${RES}分支"
    #合并
    merge_branch $TARGET_BRANCH $LOCAL_BRANCH
    #推送
    push_branch $TARGET_BRANCH
    new_line
    
    echo -e "${GREEN_COLOR}------------------ COMMIT ID ------------------${RES}"
    show_commit_id
    read -p "按任意键关闭" -n 1

    执行结果:

  • 相关阅读:
    BZOJ 4032: [HEOI2015]最短不公共子串 (dp*3 + SAM)
    后缀自动机详解!
    BZOJ 3926: [Zjoi2015]诸神眷顾的幻想乡(广义后缀自动机 多串)
    BZOJ 3938 Robot
    [JSOI2008]Blue Mary开公司
    [ZJOI2017]树状数组
    [JSOI2015]非诚勿扰
    [HNOI2011]任务调度
    BZOJ 3680 吊打XXX
    POJ 3318 Matrix Multiplication
  • 原文地址:https://www.cnblogs.com/-mrl/p/13891642.html
Copyright © 2011-2022 走看看