设为首页 收藏本站
查看: 897|回复: 0

[经验分享] 【Git系列】git rebase详解

[复制链接]

尚未签到

发表于 2018-1-12 22:40:33 | 显示全部楼层 |阅读模式
  git合并代码方式主要有两种方式,分别为:
  1、merge处理,这是大家比较能理解的方式。
  2、rebase处理,中文此处翻译为衍合过程。
  git rebase操作讲解例子:
  

cd /usr/local/test  
mkdir hellogit
  
cd hellogit # 创建hellogit目录
  
git init # 初始化git项目
  
vim readme # 新建readme文件,往里边添加内容
  
git add . # 提交内容
  
git commit
-m 'init project c1' # git系统默认创建一个master分支  

  
# 接着我们创建一个dev分支,在dev分支上添加内容
  
git checkout
-b dev # 此处其实是两步git branch dev加上git checkout dev  
vim readme # 在原来基础上增加上内容
  
git add .
  
git commit
-m 'add hello world c2'  

  
# 切换回到master分支
  
git checkout master
  
vim readme # 编辑readme文件,在第二行增加hello world from master内容
  
# 此处先埋个点,因为此处会和dev分支上做的修改冲突
  
git add .
  
git commit
-m 'add hello world c3'  
vim hello.py # 新添加一个hello.py文件
  
git add .
  
git commit
-m 'add hello.py c4'  

  
# 切换回到dev分支
  
git checkout dev
  
vim helloworld.py # 添加上helloworld.py文件
  
git add .
  
git commit
-m 'add helloworld.py c5'  

  至此,我们简单分析下情况为:
  master分支,节点链表指向为:c1<--c3<--c4
  dev分支,节点链表指向为:c1<--c2<--c5
  master分支和dev分支祖先为c1,假定在master分支上做git merge dev合并,得到的提交历史为:
  c1<--c2<--c3<--c4<--c5<--c6(c1、c4、c5做了一次三方合并发现冲突,手工处理完毕后git add/commit增加了提交节点c6)
  采用git merge dev处理提交log是按照时间戳先后顺序的。
  假定采用的是git rebase处理过程为:
  

git checkout dev  
git rebase master # 将dev上的c2、c5在master分支上做一次衍合处理
  
# git提示出现了代码冲突,此处为之前埋下的冲突点,处理完毕后
  
git add readme # 添加冲突处理后的文件
  
git rebase
--continue # 加上--continue参数让rebase继续处理  

  此处处理后的节点为:
  c1 c3 c4 c2 c5 # 此处不是按照时间顺序处理的
  综合表现,git rebase可以得到一个更加简洁的提交历史,无需多了c6。
  处理完毕后,git checkout master加上git merge dev,git会智能采用f-f处理。
  总结为:
  git rebase过程相比较git merge合并整合得到的结果没有任何区别,但是通过git rebase衍合能产生一个更为整洁的提交历史。
  如果观察一个衍合过的分支的历史提交记录,看起来会更清楚:仿佛所有修改都是在一根线上先后完成的,尽管实际上它们原来是同时并行发生的。
  一般我们使用衍合的目的,是想要得到一个能在远程分支上干净应用的补丁,比如某个项目你不是维护者,但是想帮点忙,最好使用衍合处理。
  先在自己的一个分支进行开发,当准备向主项目提交补丁的时候,根据最新的orgin/master进行一次衍合操作然后再提交,这样维护者就不需要任何整合工作。
  实际为:把解决分支补丁同最新主干代码之间的冲突的责任,划转给由提交补丁的人来解决。
  作为维护项目的人只需要根据你提供的仓库地址做一次快进合并,或者直接采纳你提交的补丁。
  衍合的风险,请务必遵循如下准则:
  一旦分支中的提交对象发布到公共仓库,就千万不要对该分支进行衍合操作。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-434443-1-1.html 上篇帖子: 深入浅出 Git 权限校验 下篇帖子: 给你的git仓库瘦身
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表