注意事項:需自行修改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