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()
{
    echo -e "切換並拉取${GREEN_COLOR} $1 ${RES} 分支最新代碼"
#     如果有兩個人共同用一個分支開發,他剛更新的代碼在測試上沒有問題,過一段時間測試完成了,通知運維人員可以上預發布環境了,
#     但是這個時候該功能分支的另外一個正好又提交了一個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()
{
    echo -e "檢出切換到本地${GREEN_COLOR} $1 ${RES} 分支"
    if git branch | grep -q $1
    then
        return 0
    else
        echo "本地沒有此分支, 從遠程分支上拉取${GREEN_COLOR} $1 ${RES}到本地"
        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
    then
        last_status
    fi
    echo -e "合並 ${GREEN_COLOR} $2 ${RES} 分支 到 ${GREEN_COLOR} $1 ${RES} 分支"
    #git merge --no-edit參數能夠用於接受自動合並的信息(通常情況下並不鼓勵這樣做)
    #合並分支
    if git merge --no-edit $2
    then
        last_status
    fi
}

# 接收一個參數,要推送的目標分支
function push_branch()
{
    echo -e "開始push推送合並代碼到遠端 ${GREEN_COLOR} $1 ${RES}"
    if git push origin $1 && git status
    then
        last_status
    fi
}

function show_commit_id()
{
    git log | head -5
}

function new_line()
{
    echo 
}

function echo_line()
{
    echo -e "${GREEN_COLOR} ---------------------------- ${RES}"
}

#*********************************
# LOCAL_BRANCH 表示功能分支
# TARGET_BRANCH 表示要合並到的分支
#*********************************

############################處理邏輯開始##############################

if [ -n "$(git status -s)" ];then
    goto_exit "有文件變更,請先處理,再執行" -2
fi

echo 1.dev_ca_common合並到dev_v1.0.0
read -p "請選擇:" input
case $input in
[1])
    LOCAL_BRANCH=dev_ca_common
    TARGET_BRANCH=dev_v1.0.0
;;
[2])
    goto_exit "退出" -2
;;
*)
#默認執行命令
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} $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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM