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
git分支合并脚本的更多相关文章
- Git分支合并冲突解决(续)
接Git分支合并冲突解决,在使用rebase合并冲突情况下,如果不小心,执行完add后执行了commit,此时本地仓库HEAD处于游离态(即HEAD指向未知的分支),如何解决? 解决方法 (1)此时, ...
- git分支合并解决冲突
git分支合并,解决冲突 1.手动解决冲突 手动解决冲突,需要使用编辑器,把所有文件中出现的冲突地方修改,然后再添加到暂存区再提交 >>>>>>brancha so ...
- git 分支合并时如何忽略某个文件
[转]git 分支合并时如何忽略某个文件 - 神奇的旋风 - 博客园 https://www.cnblogs.com/xuan52rock/p/13268872.html Git - git-merg ...
- Git 分支合并
理解核心 Git最初只有一个分支,所有后续分支都是直接或间接的从这个分支切出来的. 在任意两个分支上,向前追溯提交记录,都能找到一个最近的提交同时属于这两个分支,这个提交就是两个分支的分叉节点 分支合 ...
- Git分支合并选择
用Git进行多人协作开发时,必然会合并代码,解决冲突.然而合并代码也是需要点技巧的,如果对一些关键命令没有理解去使用的话,git的版本演进路线就会变得很乱,从而造成了日后维护的一些麻烦. Git上合并 ...
- git 分支合并 强制合并
常用的提交流程git add *.XXXgit commit -m "备注....." # 提交到本地分支git fetch git merge #"合并远程分支情况,如 ...
- Git分支合并冲突解决
前2天群里发了张git历史图,如下: 根据提交历史,可以看出图中所有分支合并都采用merge的方式,具体merge是怎么操作的,可以阅读下边文章. 根据项目上的需求,如果要求git提交历史是比较简单的 ...
- Git分支合并:Merge、Rebase的选择
git代码合并:Merge.Rebase的选择 - iTech - 博客园http://www.cnblogs.com/itech/p/5188932.html Git如何将一个分支的修改同步到另一个 ...
- git 分支合并冲突
准备新的feature1分支,继续我们的新分支开发 [root@node1 git]# git checkout -b feature1 D git/LICENSE.txt Switched to a ...
随机推荐
- 【教程】AI画放射图
第一步:画矩形作图宇宙键shift 第二步:分为网格 第三步:直接选择工具 第四步:填充交叉色,这步不再敖述: 第五步:视图--轮廓:快捷键ctrl+y; 第六步:直接选择工具选择除边框以外的所有节点 ...
- Struts2的表单标签还可以为集合中的对象赋值
•Struts 还允许填充 Collection 里的对象, 这常见于需要快速录入批量数据的场合 代码如下 : TestCollectionAction.java package com.atgu ...
- Linux 常用资源
kernel:ftp://kernel.orgcnkernel:http://www.cnkernel.orgoldlinux:http://www.oldlinux.orgminix3:http:/ ...
- Orchard 与 ABP架构比较 (aspnetboilerplate)
前言: ABP框架经常在一些.NET群中听群友提起,以前也浏览过官网,大致了解它是一个框架,直到今天本人才正式下载源码入门 ... 经过两个小时的ABP中文文档入门(感谢各位辛勤的翻译者) ,大致了 ...
- Android /system/build.prop 文件
# begin build properties (开始设置系统性能) # autogenerated by buildinfo.sh (通过设置形成系统信息) ro.build.id=GRI40 ( ...
- centos 安装 Vmare tool
增强工具的作用 和host共享文件夹 鼠标自动捕捉释放 高分屏 自适应窗口 1.打开centOs虚机进入图形界面,点击工具栏上的虚拟机->重新安装WMare Tools 2.挂载光驱 查询光驱完 ...
- TFS中工作项的定制-修改面板
上一篇文章我们讲到了<TFS 中工作项的订制-修改工作流>,工作流只要我们设计出来,就可以进行定制修改了.这次通过简单的案例,了解一下,工作项的面板如何定制. 1.软件准备 ...
- 字符串与图片的Base64编码转换操作
//图片 转为 base64编码的文本 private void button1_Click(object sender, EventArgs e) { OpenFileDialog dlg = ne ...
- AntiSamy测试
AntiSamy为owasp针对xss提供的处理库,可以配置xml策略来决定过滤的内容,比如标签.属性.css等,自定义策略给开发人员使用成本比较高,AntiSamy也提供了几个内置的策略,其安全级别 ...
- 《Monitoring and Tuning the Linux Networking Stack: Receiving Data》翻译
Overview 从宏观的角度来看,一个packet从网卡到socket接收缓冲区的路径如下所示: 驱动加载并初始化 packet到达网卡 packet通过DMA被拷贝到内核中的一个ring buff ...