git|Git操作:在多个分支之间,使用git am打patch和同步分支
文章插图
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|Git操作:在多个分支之间,使用git am打patch和同步分支】使用Git的工作流程:修改、暂存、提交、推送
- Win10系统桌面|手机桌面秒变Win10电脑系统,这波操作太给力了!
- wmv|怎么把mp4转wmv?转换视频格式,这样操作很掂
- 试试|手机内存不够用,咋办?试试关闭微信这两步操作,轻松腾出几个G
- 操作|[LIVE On]黄敏贤和郑多彬充满心碎的下午:机器操作每次都不能通过测试
- 天津滨海网|word删除空白页,该怎么操作呢?
- 操作|动用军队“挖”比特币!委内瑞拉秀出神操作,背后原因令人心酸
- 如何基于Python实现自动化控制鼠标和键盘操作
- 爱了!一个现代化的 Git CLI 客户端,一堆命令不用记了
- 飞智高性价比银镜手游钢化膜:操作角色更顺滑,防指纹还防划
- 熟悉的启动界面(一),千禧年后7款家用操作系统,你见过几个?