- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Git 分⽀的衍合
把一个分支中的修改整合到另一个分支的办法有两种 :merge 和
rebase (译注 :rebase 的 译暂定为 “衍合” ,大家知道就可以了。 )。
在本章我们会学习什么是衍合 ,如何使用衍合 ,为什么衍合操作如此富有
魅力 ,以及我们应该在什么情况下使用衍合。
基本的衍合操作
请回顾之前有关合并的一节 (见图 3-27 ),你会看到开发进程分叉到两个
不同分支 ,又各自提交了更新。
图 3-27. 最初分叉的提交历史。
之前介绍过 ,最容易的整合分支的方法是 merge 命令 ,它会把两个分支最
新的快照 (C3 和 C4 )以及二者最新的共同祖先 (C2 )进行三方合并 ,合
并的结果是产生一个新的提交对象 (C5 )。如图 3-28 所示 :
图 3-28. 通过合并一个分支来整合分叉了的历史。
其实 ,还有另外一个选择 :你可以把在 C3 里产生的变化补丁在 C4 的基
础上重新打一遍。在 Git 里 ,这种操作叫做衍合 (rebase )。有了 rebase
命令 ,就可以把在一个分支里提交的改变移到另一个分支里重放一遍。
在上面这个例子中 ,运行 :
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
它的原理是回到两个分支最近的共同祖先 ,根据当前分支 (也就是要进行
衍合的分支 experiment )后续的历次提交对象 (这里只有一个 C3 ),生
成一系列文件补丁 ,然后以基底分支 (也就是主干分支 master )最后一个
提交对象 (C4 )为新的出发点 ,逐个应用之前准备好的补丁文件 ,最后会
生成一个新的合并提交对象 (C3 ),从而改写 experiment 的提交历史 ,
使它成为 master 分支的直接下游 ,如图 3-29 所示 :
图 3-29. 把 C3 里产生的改变到 C4 上重演一遍。
现在回到 master 分支 ,进行一次快进合并 (见图 3-30 ):
图 3-30. master 分支的快进。
现在的 C3 对应的快照 ,其实和普通的三方合并 ,即上个例子中的 C5 对
应的快照内容一模一样了。虽然最后整合得到的结果没有任何区别 ,但衍
合能产生一个更为整洁的提交历史。如果视察一个衍合过的分支的历史记
录 ,看起来会更清楚 :仿佛所有修改都是在一根线上先后进行的 ,尽管实
际上它们原本是同时并行发生的。
一般我们使用衍合的目的 ,是想要得到一个能在远程分支上干净应用的补
丁 — 比如某些项目你不是维护者 ,但想帮点忙的话 ,最好用衍合 :先在自
己的一个分支里进行开发 ,当准备向主项目提交补丁的时候 ,根据最新的
origin/master 进行一次衍合操作然后再提交 ,这样维护者就不需要做任
何整合工作 (译注 :实际上是把解决分支补丁同最新主干代码之间冲突的
责任 ,化转为由提交补丁的人来解决。 ),只需根据你提供的仓库地址作
一次快进合并 ,或者直接采纳你提交的补丁。
请注意 ,合并结果中最后一次提交所指向的快照 ,无论是通过衍合 ,还是
三方合并 ,都会得到相同的快照内容 ,只不过提交历史不同罢了。衍合是
按照每行的修改次序重演一遍修改 ,而合并是把最终结果合在一起。
有趣的衍合
衍合也可以放到其他分支进行 ,并不一定非得根据分化之前的分支。以图
3-31 的历史为例 ,我们为了给服务器端代码添加一些功能而创建了特性分
支 server ,然后提交 C3 和 C4。然后又从 C3 的地方再增加一个 client 分
支来对客户端代码进行一些相应修改 ,所以提交了 C8 和 C9。最后 ,又回
到 server 分支提交了 C10。
图 3-31. 从一个特性分支里再分出一个特性分支的历史。
假设在接下来的一次软件发布中 ,我们决定先把客户端的修改并到主线
中 ,而暂缓并入服务端软件的修改 (因为还需要进一步测试 )。这个时
候 ,我们就可以把基于 client 分支而非 server 分支的改变 (即 C8 和
C9 ),跳过 server 直接放到 master 分支中重演一遍 ,但这需要
用 git rebase 的 --onto 选项指定新的基底分支 master :
$ git rebase --onto master server client 这好比在说 :“取出
cl
您可能关注的文档
- ENVI遥感图像处理专题及实践.pdf
- ERP销售管理模块常见问题和解决方案.pdf
- eSATA接口移动硬盘使用注意事项.doc
- Eviews2篇EViews工作界面介绍.ppt
- Eviews3篇序列(Series)对象的基本操作.ppt
- Excel 2003 VBA中MsgBox函数介绍.pdf
- Excel 2013 自定义函数使用.pdf
- Excel VBA 基本概念及基本的操作.pdf
- Excel 二级下拉菜单3种方法.docx
- excel1000个小技巧(全集)——第08篇_Excel打印技巧.pdf
- 2025年南京市市场监督管理局所属事业单位招聘编外笔试高频难、易错点备考题库及完整答案详解1套.docx
- 2025年南通如东县融媒体中心招聘紧缺型专业人才笔试备考题库及答案详解1套.docx
- 2025年南京市鼓楼区文化和旅游局所属事业单位招聘2人笔试备考题库及答案详解1套.docx
- 2025年四川成都市司法局所属事业单位招聘中学教师27人笔试备考题库参考答案详解.docx
- 2025年南充市公安局第一次招聘27名交通辅警的笔试高频难、易错点备考题库及参考答案详解一套.docx
- 2025年四川省医学科学院·四川省人民医院招聘58人(第二次)笔试高频难、易错点备考题库及参考答案详.docx
- 2025年四川巴中市公安局恩阳区分局招聘警务辅助人员20人笔试备考题库含答案详解.docx
- 2025吉林农业大学招生专业目录.doc
- 2025级《建筑施工技术》复习提纲资料.doc
- 2025年教师招聘试题答案.doc
最近下载
- GB50863-2013 尾矿设施设计规范.docx VIP
- 2025年陕西省二级造价工程师职业资格考试《基础知识》真题及答案.docx VIP
- 人教版PEP三年级英语下册全册同步练习随堂练习一课一练版(有答案).pdf VIP
- 彩钢管理房单元工程施工质量评定表(1).doc VIP
- 江西婺源篁岭民俗文化村发展规划--规划说明.pdf
- IATF16949-2016事态升级控制规范.doc VIP
- 新收入准则对电商企业运营的影响及应对策略.docx VIP
- 东莞市地图含区县可编辑可填充动画演示矢量分层地图PPT模板.pptx VIP
- XX县2022年度自然资源统一确权登记项目技术设计书模版.docx VIP
- 女儿墙维修工程施工方案(3篇).docx VIP
文档评论(0)