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

 

执行结果:

 

posted @ 2020-10-28 16:05  一个人的孤独自白  阅读(506)  评论(0编辑  收藏  举报