git分支合并脚本

  • 为何要写这个脚本
    • 工做中常常会有合并分支的操做,一开始也不觉得然,后来发现若是更新频繁的话,根本就停不下来,昨天上午正好有空,就完成了下面的这个第一版
  • 可能存在的问题
    • 通常的应用场景都是:从master分支里面拉取出新feature,bug, release分支,若是分支完成,则须要先合并在test分支里面,test分支测试完成后,合到master分支里面,这时候可能并不会直接上线,还有一个preview环境,其实这里用到的代码和线上同样,都是master里面的,那么问题来了
    • 若是有两我的共同用一个分支开发,他刚更新的代码在测试上没有问题,过一段时间测试完成了,通知运维人员能够上预发布环境了,可是这个时候该功能分支的另一个正好又提交了一个commit,这时会把最新的版本也合并了,说了半天,才说到重要,也就是每次合并以前都会有个pull --rebase操做
    • 固然也能够再建立一些函数之类的,可是这样就失去了脚本的便利性,后面加一堆操做也不是很好,若是博友有好的建议,欢迎探讨^ _^通常只须要mb dev_xxx_fix_xxx test就搞定了,额,这个名字是我建的一个软链没有其它的意思,only first letter of the merge branch
#!/bin/sh
# Author: zhang.wen
# Date: 2017-03-23 13:03
# VersionControlTools: git
#******************************
# $1 表示功能分支
# $2 要合并到的分支[ test|master ]
#******************************
# 退出状态码:
# -1表示没有找到此分支
# -2表示代码执行异常

MERGE_BRANCH=$1
TARGET_BRANCH=$2

function last_status()
{
    if [ $? -eq 0 ]
    then
        return 0
    else
        exit -2 
    fi
}

function pull_latest_branch()
{
    if git checkout $1 && git pull --rebase 
    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 
}

if [ $# -eq 0 ]
then
    echo '请输入要合并的分支名, 用法以下:'
    echo "$0 src_branch dst_branch"
    exit 0
fi

echo -e "\\033[0;31;1m当前摘取的分支是:\\033[0m $MERGE_BRANCH"
echo -e "\\033[0;31;1m要合并到的分支是:\033[0m $TARGET_BRANCH"
check_branch $MERGE_BRANCH
new_line

echo -e "拉取\\033[0;32;1m $MERGE_BRANCH\\033[0m 最新代码"
pull_latest_branch $MERGE_BRANCH
new_line

echo -e "切换到\\033[0;32;1m $TARGET_BRANCH \\033[0m分支,合并\\033[0;32;1m $MERGE_BRANCH\\033[0m 最新代码"
merge_branch $TARGET_BRANCH $MERGE_BRANCH
push_branch $TARGET_BRANCH
new_line

echo -e "\\033[0;31;1m------------------ COMMIT ID ------------------\\033[0m"
show_commit_id