前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Git学习笔记】逃不掉的merge和rebase

【Git学习笔记】逃不掉的merge和rebase

作者头像
用户6543014
发布2019-11-23 16:08:01
2.8K0
发布2019-11-23 16:08:01
举报

今天说说最难的merge和rebase的区别,图文并茂,一文让你明明白白。上菜!

一、merge

在前面的知识点中我们已经介绍过merge了,实际上遇到过合并,今天以实际中经常遇到的情况作为例子进行实操。

真实情景:你从远端master分支拉取了一个mywork分支进行工作,此时你的小伙伴也从远端master拉取了一个分支进行工作,且将修改内容先push到了远端master分支上,而你也在mywork分支上进行了修改,此时你mywork分支落后远端分支,更主要是你开发的功能要在 master 最新的基础上开发,或者你也想要 master 上最新的内容,重点来了,现在我们怎么办?

方法有如下两种:

  • 一种是使用 rebase ;
  • 另一种是使用 merge。

我们先说一下merge方法:

第一步:先把自己的分支推到远程mywork分支(如果你已经建立远程mywork分支就不必建立,工作良好习惯,应该需要及时将本地内容推送到远程自己所在分支)。

第二步:你需要切回本地master分支,先pull远端master分支到本地master分支。

注意:可以不加 –rebase 。感兴趣可以自行查询下加与不加有啥区别。

第三步:切回到mymork分支且拉取远端mywork分支(如果确定是最新的可以不操作,以防万一pull一下)

第四步:merge master分支到mywork分支,且push到远端mywork分支

可以看到 merge 之后,在mywork分支上多出一条合并的log。

第五步:我们的mywork分支开发完成了,要合并到 master 分支,根据基本原则,在 master 分支上都使用 git merge mywork 就可以合并。

看下图结果: merge mywork:是以 Fast-forward方式呀。

来来来,看看merge一波的log:

Merge branch 'master' into mywork 不是我手打的,当你在mywork分支上进行git merge master时会弹出个文本的东西,直接:wq退出就好。

这张图恐怕第一次看都有点不知所云,*表示提交的记号,每次出现表示一次提交,右边会对应下来:

Commitid, 作者,日期,commit信息。可以看出我们的mywork分支落后与master分支两个提交才先pull再merge的。

merge会自动帮我们提交一个 Merge branch 'master' into mywork,当然你也可以修改这句话,就是弹出的文本进行修改,你不修改直接退出就是这句话啦。等mywork阶段性工作完啦,我们就git merge mywork,然后推送到远端master 完成合并。

这里有条折线,有直线强迫的人恐怕是不喜欢的,所以很多人喜欢rebase,那我们来说说rebase。

二、rebase

第一步:拉取远端mywork分支

第二步:切换到master分支,且拉取最新的master提交

第三步:切换到mywork分支,rebase master分支到mywork分支,因为我们的功能开发是依托在最新的master分支上的。所以要rebase到mywork分支。

第四步:推到远端的mywork分支,但是发现不行。怎么办?强制推。

第五步:我们在mywork分支做好了工作了,现在rebase到远端master分支。

一起来看看结果,顺便和merge对比一下。使用 rebase 就感觉所有人都在同一条直线上开发一样,很干净的log,看着很舒服,而一直使用 merge 的log看起来就很乱,我这只是2个分支的例子,可见 rebase是真的解放了强迫患者。

后记:这个例子中的操作都没有出现不同分支修改同一个文件导致冲突的情况,实际开发中这种情况非常多。

ebase 的时候出现冲突后 git 也会列出来哪些文件冲突了,等你解决冲突之后使用 git rebase --continue 就会继续处理。

所以为了避免这种冲突太多,而且不好解决。

三、rebase 和 merge 的基本原则

  • 下游分支更新上游分支内容的时候使用 rebase;
  • 上游分支合并下游分支内容的时候使用 merge;

注意:更新当前分支的内容时一定要使用 --rebase 参数;例如现有上游分支 master,基于 master 分支拉出来一个开发分支 dev。

在 dev 上开发了一段时间后要把 master 分支提交的新内容更新到 dev 分支,此时切换到 dev 分支,使用 git rebase master,等 dev 分支开发完成了之后,要合并到上游分支 master 上的时候,切换到 master 分支,使用 git merge dev。

最后,本系列有关于Git的动手笔记系列就都结束了,该系列共分为了8个章节,以动手实践为主。也许看一遍并不一定能够全都记住,但希望能够在你现在 or 以后的学习和工作中,在用到的时候你会第一时间想到自己看过相关的内容。

菜都上完啦,只是系统上菜节奏完结了,先埋下伏笔,如果你遇到些难处理的情况,你可以给我们留言,我们会第一时间针对“你”写出分享。

这一些列应对工作足够了!不,有个前提,是你真的跟着实践了,如果有个别不理解,等你操作多了后自然就理解。但是基本概念和专业术语还是请你一定要理解清楚呀,否则跟着操作完了还是一头雾水。

多实践才能出真知,这一些列都可以复现的,而且是按照实践序列来实践的。跟着一起来吧。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 SACC开源架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档