背景

公司接了个新项目,需在平台上增加几个新接口,问题是本来说是和平台一起迭代发布的时间提前了,但当前的代码都和其他开发人员一起提交到了develop中,现在要提前发布只能从master拉出一个分支来把我的提交都添加上去然后测试发布。

操作命令

cherry-pick

当时想到的第一个命令就是这个,检出我的所有提交,然后应用到另一个分支中去。平时使用这个命令只是简单的pick一个提交,现在需要编写个shell脚本,自动化我们某段时间内的操作全都pick到新分支上去。

git log

这里面我们还用到一个很重要的命令git log用来查询我的所有提交日志,最后输入想要的commit IDgit cherry-pick使用,下面是git log常用的格式占位符写法及其代表的意义:

Shell脚本

由于公司代码不好贴出来,所以只能介绍操作方法了。

  • 开发分支:develop
  • 线上分支:master
  • 紧急发布分支:hotfix/urgent-publish(不要太关注这个名字,哈哈,和平台的打包策略有关)
  • 我提交的commit author名称:Charles

我们现在定义操作的步骤:

  • 拉取最新的master代码,查看提交记录

    gco master;git pull;git log --author="Charles" --reverse --pretty=format:"%H %ad %s" | cat
  • 创建紧急发布分支

    git checkout -b hotfix/urgent-publish;git push --set-upstream origin hotfix/urgent-publish
  • 拉取最新的develop的代码,查看提交记录

    gco develop;git pull;git log --author="Charles" --reverse --pretty=format:"%H %ad %s" | cat
  • grep所有我之前的提交记录,然后把commit打印出来,并输出到一行,赋值给变量commits

    commits=($(git log --author="Charles" --since=2020-05-10 --reverse --pretty=format:"%H %s" | grep -v "Merge branch" | awk '{print $1}' | tr -s "\n" " "))
  • 对每个commit循环应用cherry-pick,最后提交到发布分支中去

    for commit in $commits;do git cherry-pick $commit;done
    git push origin hotfix/urgent-publish

紧急发布用cherry-pick检出当前分支所有我的提交记录的更多相关文章

  1. git本地检出远程分支

    场景:本地分支被误物理删除,想要重新将自己的分支代码从远程拉取下来.(此时取的是最后一次git push上去的分支代码) 1.与远程仓库重新建立关系 1 git clone git@gitlab.名称 ...

  2. git 检出

    1 git checkout branch 检出branch分支.要完成图8-1三个步骤,更新HEAD已指向新分支 以及用branch指向的树更新暂存区和工作区 2 git checkout 显示出工 ...

  3. 第四节《Git检出》

    使用过Git的朋友们都谁知道git reset可以达到重置效果,不知道的小伙伴们可以看下上一篇博客,重置命令的一个用途就是修改引用的游标指向,实际上在执行重置命令的时候没有使用任何参数对所要重置的分支 ...

  4. Git学习之Git检出

    ================================================ HEAD 的重置即检出 ======================================= ...

  5. Git-GIt检出

    实际上在执行重置命令的时候没有使用任何参数对所要重置的分支名进行设置,这是因为重置命名实际上所针对的是头指针HEAD.之所以没有改变HEAD的内容是因为HEAD指向了一个引用refs/heads/ma ...

  6. GIT上面有的分支,本地却无法检出,也看不到该分支

    正常情况在gitlib上面可以看到代码里面有develop的分支 然而本地在查看所有分支的时候却报错 #查看所有的分支 git branch -a 这种情况是没有更新远程分支的索引,所以这样是看不到的 ...

  7. IDEA 从SVN检出项目相关配置

    1.新建好一个工程,然后通过SVN检出项目 2.检出后一般tomcat的环境是配置好的,点击上方Project Structure按钮,弹出窗体,查看Project项,一般没问题,如果要配置就配置Pr ...

  8. SVN(一次检出&二次检出)

    一次检出: >进入经历文件夹 >输入svn checkout指令 >输入电脑密码 >输入用户名 >输入密码 >检出成功 第二次检出: >进入小涛文件夹 > ...

  9. SVN学习——简单入门之创建仓库、导入、检出(一)

    从刚刚参加工作就开始使用svn,清晰的记得那年师姐比较生气的来找我:“你怎么又不更新就提交代码了,把我写的都给覆盖掉了”,哈哈~ 虽然一直在用svn,不过在日常工作中主要用到的是简单的操作,而且大多数 ...

随机推荐

  1. 读高性能Mysql摘要

    类型相关 INT(1)和INT(20)对于存储和计算来说,意义是相同的,他不会限制值的合法范围,只是一些交互工具会用来显示字符的个数 默认是有符号的,可以指定为无符号,增加数据存储范围,如0-255, ...

  2. Java中的微信支付(1):API V3版本签名详解

    1. 前言 最近在折腾微信支付,证书还是比较烦人的,所以有必要分享一些经验,减少你在开发微信支付时的踩坑.目前微信支付的API已经发展到V3版本,采用了流行的Restful风格. 今天来分享微信支付的 ...

  3. Libevent库基础(1)

    1.创建 eevent_base struct event_base *base = event_base_new(); 2.创建 事件event struct event *ev; struct e ...

  4. SpringBoot连接多数据源(HBASE,KUDU,ORACLE集成和开发库)

    前提:1.连接hadoop需要本地安装 winutils.exe 并在程序指定,不然程序会报错  IOException: HADOOP_HOME or hadoop.home.dir are not ...

  5. JAVA学习第一阶段(2)

    21. ArrayList类和LinkList类 注意:add,contains,remove,retain(取交集) 都可以+all表示对集合的操作 ArrayList c = new ArrayL ...

  6. go-zero 是如何追踪你的请求链路的

    go-zero 是如何追踪你的请求链路 微服务架构中,调用链可能很漫长,从 http 到 rpc ,又从 rpc 到 http .而开发者想了解每个环节的调用情况及性能,最佳方案就是 全链路跟踪. 追 ...

  7. Centos7安 装python3+Selenium+chrome+chromedriver

    Centos7安装python3+Selenium+chrome+chromedriver详细python2和python3共存,Selenium错误的处理更新Centos源 wget -O /etc ...

  8. Luogu P1856 [USACO5.5]矩形周长Picture

    线段树+扫描线 经典的扫描线问题 首先将一个矩形看作由竖着的两条边和横着的两条边构成 那分成两次考虑,一次考虑竖边,一次考虑横边 首先考虑横边 如图两个矩形,现将横边擦去,留下竖边,将平面划分成3个区 ...

  9. c#导入文件

    string[] lines = System.IO.File.ReadAllLines(@"C:\Users\Administrator\Desktop\2.txt",Encod ...

  10. Pandas_VBA_数据分类比较

    Python与VBA的比较2 需求: input文件中有两列数据,第一列为Name,第二列为Score,Name列里有重复的值,要求按照name的唯一值统计 score,输出到output文件按中. ...