• 为什么要写这个脚本

    • 工作中经常会有合并分支的操作,一开始也不以为然,后来发现如果更新频繁的话,根本就停不下来,昨天上午正好有空,就完成了下面的这个初版
  • 可能存在的问题
    • 一般的应用场景都是:从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

git分支合并脚本的更多相关文章

  1. Git分支合并冲突解决(续)

    接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...

  2. git分支合并解决冲突

    git分支合并,解决冲突 1.手动解决冲突 手动解决冲突,需要使用编辑器,把所有文件中出现的冲突地方修改,然后再添加到暂存区再提交 >>>>>>brancha so ...

  3. git 分支合并时如何忽略某个文件

    [转]git 分支合并时如何忽略某个文件 - 神奇的旋风 - 博客园 https://www.cnblogs.com/xuan52rock/p/13268872.html Git - git-merg ...

  4. Git 分支合并

    理解核心 Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的. 在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点 分支合 ...

  5. Git分支合并选择

    用Git进行多人协作开发时,必然会合并代码,解决冲突.然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. Git上合并 ...

  6. git 分支合并 强制合并

    常用的提交流程git add *.XXXgit commit -m "备注....." # 提交到本地分支git fetch git merge #"合并远程分支情况,如 ...

  7. Git分支合并冲突解决

    前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的 ...

  8. Git分支合并:Merge、Rebase的选择

    git代码合并:Merge.Rebase的选择 - iTech - 博客园http://www.cnblogs.com/itech/p/5188932.html Git如何将一个分支的修改同步到另一个 ...

  9. git 分支合并冲突

    准备新的feature1分支,继续我们的新分支开发 [root@node1 git]# git checkout -b feature1 D git/LICENSE.txt Switched to a ...

随机推荐

  1. 170420、maven内置常量

    Maven工程插件配置中通常会用到一些Maven变量,因此需要找个地方对这些变量进行统一定义,下面介绍如何定义自定义变量. 在根节点project下增加properties节点,所有自定义变量均可以定 ...

  2. iOS中navigationItem修改标题的颜色

    UIColor * color = [UIColor redColor];//这里我们设置的是颜色,NSDictionary * dict = [NSDictionary dictionaryWith ...

  3. windows accounts

    Some built-in groups are used for management purposes. You control which > users belong to these ...

  4. FreeMarker 的使用方法

    1.FreeMarker 概述 FreeMarker 是一个用Java语言编写的模板引擎,使用模板来生成文本输出;主要用于做静态页面或页面展示; 2.FreeMarker 使用 // 导入jar包: ...

  5. MySQL优化(一):MySQL分库分表

    一.分库分表种类 1.垂直拆分 在考虑数据拆分的时候,一般情况下,应该先考虑垂直拆分.垂直可以理解为分出来的库表结构是互相独立各不相同的. - 如果有多个业务,每个业务直接关联性不大,那么就可以把每个 ...

  6. XTU1198:Candy(背包)

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/libin56842/article/details/26182519 题目描写叙述 Henry和Le ...

  7. Linux shell 程序设计

    shell 程序设计 主要的学习内容包含基本思路,语法:变量.条件判断和程序控制,命令列表,函数,命令及执行,调试,grep命令和正则表达式,find命令 什么是shell 适用编写执行相对简单任务的 ...

  8. SSH secure shell 原理与运用

    转: http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html 作者: 阮一峰 日期: 2011年12月21日 SSH是每一台Linux ...

  9. Spark2.0 Pipelines

    MLlib中众多机器学习算法API在单一管道或工作流中更容易相互结合起来使用.管道的思想主要是受到scikit-learn库的启发. ML API使用Spark SQL中的DataFrame作为机器学 ...

  10. Oracle 修改trace 文件路径

    修改trace 文件路径命令 适用于oracle 11G以后的版本 在集群环境中的2个节点都生效SQL> ALTER SYSTEM SET diagnostic_dest='/tmp' SCOP ...