Git 是一个开源的分布式版本控制系统,可以方便、高效地处理从小到大的不同的项目版本管理。

分支模型是Git最显著的特点,开发者可以随时创建、合并、删除分支。对于不同的项目需求、不同的软件版本、不同的开发阶段(Develop、Feature、Hotfix、Release),可以创建多个分支进行开发,之后可以进行分支合并,这种方式使开发变得快速、简单、安全。

Git的分支模型

比如有两个分支:A和B,A分支中的两个patch,我们需要同步到B分支。这时候有两种打patch的方案:

  • 在A分支用 git diff 生成.diff文件,然后在B分支用 git apply 打patch。
  • 在A分支用 git format-patch 生成.patch 文件,然后在B分支用 git am 打patch。

需要注意的是:

  • .diff 文件只是记录文件改变的内容,没有commit的提交信息,因此用 git apply 打上patch之后,还需要再重新commit。
  • .patch文件不仅记录文件改变的内容,也有commit的提交信息(每个commit对应一个patch文件),因此可以把提交信息也都打进去。

这里介绍一下使用 git am 打patch的步骤。

1、查看patch的提交信息

使用 git log 命令查看patch的提交信息,如下图所示。

2、生成所选的patch

在A分支使用 git format-patch 命令生成相关patch,根据需要,有不同的patch生成方法。

生成最近1次commit的patch:

git format-patch HEAD^

生成最近2次commit的patch:

git format-patch HEAD^^

生成单个提交的patch:

git format-patch [commit-id] -1

生成某次提交(含)之前的n次提交:

git format-patch [commit-id] -n

生成某次提交(不含)之后的所有提交:

git format-patch [commit-id]

使用 git format-patch 命令生成相关patch,每个patch都是一个单独的文件,并采用编号+提交信息的方式命名,如:0001-Feature-hello-world.patch。

3、打patch

在B分支用 git am *.patch 命令打上所有patch。

若没有任何问题,git am 会直接将 patch 的所有信息都打上去,使用 git log 可以查看是否成功。

但意外才是常态!

下面几个命令在遇到问题时会经常使用。

检查patch修改的文件:

git apply --stat xxxx.patch

检查patch能否打成功:

git apply --check xxxx.patch

若这条命令没有任何输出,则代表可以直接打成功;若有冲突,则会输出error信息。

有冲突没关系,使用下面命令强行合入 patch 中不冲突的代码,同时保留冲突的部分:

git apply --reject xxxx.patch

使用上面的命令,会把有冲突的部分保存为 .rej文件,然后手动编辑发生冲突的code文件,解决冲突后,删除 .rej文件,通过 git add 命令将相关文件添加到暂存区中。

告诉git冲突解决,继续打patch:

git am --resolved

若需要跳过有冲突的patch,则使用:

git am --skip

若中途不想打patch了,恢复原状,则使用:

git am --abort

上面就是整个流程,最后通过 git log 命令来查看是否成功,确认没问题后使用 git push 命令将修改推送到远程仓库。

相关阅读

Git 常用命令

Git 操作错误搞砸了怎么办,收藏这份文档吧

使用Git的工作流程:修改、暂存、提交、推送

commit分拆多个 git_Git操作:在多个分支之间,使用git am打patch和同步分支相关推荐

  1. commit分拆多个 git_Git拆分commit提交

    如果感觉某一次提交的内容较多,可以将它们拆分为多个提交. 首先看一下提交历史记录,代码如下:[Shell] 纯文本查看 复制代码$ git log --oneline 代码运行效果截图如下: 在e22 ...

  2. commit分拆多个 git_git如何合并只有两个commit到一个?

    用rebase -i 比如下图的commit 历史,想要把 "Second change" 和 "Third change" 这两个commit合并到一起 那么 ...

  3. commit分拆多个 git_这才是真正的Git——Git内部原理

    本文以一个具体例子结合动图介绍了Git的内部原理,包括Git是什么储存我们的代码和变更历史的.更改一个文件时,Git内部是怎么变化的.Git这样实现的好处等等. TL;DR 本文以一个具体例子结合动图 ...

  4. Spark数据倾斜-采样倾斜key并分拆join操作-详细图解与代码

    本文修改自[1]中的方案六. 下面的方案简述来自[1] 方案适用场景:两个RDD/Hive表进行join的时候,如果数据量都比较大,无法采用"解决方案五",那么此时可以看一下两个R ...

  5. 第五次电信分拆敷陈幕后:激发运营商乖戾反弹

    "能让广电做IDC营业,拿到国际互联网出口.开放ISP牌照.还不被电信在路由器上做手脚,我觉得就跟吃着暖锅唱着歌一样幸福而满足啦!"关于社科院的<第五次电信分拆方案研讨> ...

  6. java 独占锁_锁分类(独占锁、分拆锁、分离锁、分布式锁)

    一.java内存模型 提到同步.锁,就必须提到Java的内存模型,为了提高程序的执行效率,java也吸收了传统应用程序的多级缓存体系. 在共享内存的多处理器体系架构中,每个处理器都拥有自己的缓存,并且 ...

  7. 一段三次分拆的蚂蚁搬家式MySQL迁移经历

    趁机房搬迁的机会,打算做一次业务整合.现有的架构是在2010年规划并运营起来的,随着时间的推移,项目也越来越多.打开Nginx配置文件,有四十多行Include包含存在,每一个包含就是一个项目(有些是 ...

  8. 一个IT时代的终结:109岁的IBM将分拆为两家公司

    作者 | 核子可乐.晓旭 策划 | 钰莹 导语:根据路透社最新消息,IBM 将拆分托管基础设施服务部门,成为一家新的上市公司,以便能专注于包括红帽在内的混合云业务.在此轮拆分完成之后,IBM 公司的软 ...

  9. 分拆计划陷入困境,英特尔还能重回巅峰吗?

    据外媒报道,英特尔即将于2022年1月26日发布第四季度财报.还记得2021年2月,英特尔迎来了第八任CEO即英特尔曾经的首任CTO帕特·基辛格(Pat Gelsinger),他的上任也被业界寄予厚望 ...

最新文章

  1. 对支持向量机(SVM)的个人理解
  2. “万人迷”小冰背后的AI故事
  3. 如何让决策树中有样本的索引
  4. 双一流高校通知「19级硕士秋季学期不开学!」决定引热议,你怎么看?
  5. 索引和长度必须引用该字符串内的位置--ArgumentOutOfRangeException
  6. 为博客园博文添加目录的两种方法
  7. Java swing 代码例子
  8. centos6.5安装apache php,Centos66安装apache24
  9. 鸿蒙系统即将发布,华为鸿蒙商标获转让
  10. scws sphinx mysql_Sphinx系列文章\SCWS中文分词
  11. 蓝牙nrf52832的架构和开发(转载)
  12. 【操作系统笔记】中断系统
  13. 关于12864显示器的SPI串行驱动问题的研究,AVR处理器(1)
  14. NitroShare 是一个局域网文件传输工具,支持 Windows、OS X 和 Linux。基于 Qt 开发。
  15. 微信小程序——微信授权获取手机号弹窗(官方自带)
  16. 如何提高软件测试团队工作效率
  17. 3W字,Docker 从入门到精通
  18. test failed: The forked VM terminated without saying properly goodbye. VM crash or System.exit
  19. 一文详解elasticsearch的索引生命周期管理—rollover+curator—ilm
  20. 如何关闭华为手机连接电脑自动弹出cd驱动器和类似文件管理文件夹

热门文章

  1. IOS10.8.2安装
  2. ASP.NET页面请求处理
  3. 尤金·卡巴斯基:卡巴斯基实验室调查内网遭黑客攻击事件
  4. Vim 使用教程(搬运)
  5. 网易云易盾牵手百视通 助力广电领域新媒体内容安全
  6. Css 基本的规则写法
  7. 多重循环、缓冲区管理、数组(day06)
  8. ajax提交时“加载中”提示的处理方法
  9. 201506110248 ---实验报告
  10. jasper 常用知识点总结