Git中的“pull request”真正比较的是什么?

2020-09-05 0 376 百度已收录

前言

利用git版本控制工具时,我们通常会从主分支拉出新分支进行开发,开发完成后创建pr(也就是pull request),让其他小伙伴帮忙review,确定代码没有问题后再将新分支合并到主分支上。但是,你真的理解pull request中比较的两个分支到底是谁吗?

下面以一个虚拟案例进行说明:假设主分支名为“Master”,拉出来的新分支名为“developBrance1”。

最简单情况

Git中的“pull request”真正比较的是什么?

上图中,我们从主分支Master的m1提交点拉出新分支developBranch1,然后在developBranch1分支上开发(开发过程中产生了d1、d2、d3共3个提交),开发完成后创建pr,然后经过Review后将其合并到主分支上形成新的提交点N。自然而然地,我们创建pr时选择的源和目标为:

src[developBranch1] -> dest[Master]

我们期望pr比较的是developBranch1和Master这两个分支的最新提交点,pr实际比较的也是developBranch1的d3提交点Master分支的m1提交点之间的差异。

增加一点复杂度

假设现在有其他小伙伴和你一同工作(这才是工作中的场景),另外一名小伙伴也从Master分支的m1提交点拉出分支developBranch2进行开发,并产生了若干提交,而且在我们开发完成之前已经合并到了Master分支上:

Git中的“pull request”真正比较的是什么?

现在我们创建pr时,源和目标自然还是:

src[developBranch1] -> dest[Master]

但此时pr实际比较的是developBranch1和Master这两个分支的最新提交点吗( developBranch1的d3提交点Master分支的m2提交点)?

答案:不是的。现在pr比较的其实是developBranch1的d3提交点Master分支的m1提交点,和上面最简单的情况完全没有差别

 

其实pr的底层这样实现非常有道理:

我们创建pr时,两个分支比较的差异只是自己开发的内容。试想,如果合作开发情况下比较developBranch1的d3提交点和Master分支的m2提交点之间的差异,那我们会同时看到其他小伙伴的开发内容,你会想,这不是反应了“最新工作进度”吗?不就是多看一个小伙伴的代码吗?好,再试想如果同时有很多人开发,我们提交自己的代码时,夹杂了许多其他小伙伴的代码,你会不会因找不到自己开发的代码而发疯?

“最新工作进度”的疑惑还在吧?下面来解答。

git是如何反映最新工作进度的?

 其实,git合并不同分支时,会自动取它们的并集,以保持最终工作进度。就拿上图说,如果developBranch1的d3提交点和developBranch2的o2提交点之间不存在冲突,两者的开发工作最终都会在m3中体现(当然,有冲突了就需要手动解决)。

现在还有一个问题,pr比较的原理是什么?

pr比较的是:

源分支的最近提交点源分支和目标分支的最近公共父提交节点之间的差异。在文中第二张图中,可以看到源分支是developBranch1,目标分支是Master,两个分支的最近公共父提交节点是m1;所以最终比较的就是源分支的最近提交点d3m1。

探索欲强的读者也可以试试把不同分支分别作为pr的源和目标,观察pr输出的差异,以加深印象

后记

其他更为复杂的分支pr原理类似,只是需要结合更为复杂的合并策略进行分析。文中若有疏漏,欢迎指正补充。

将Git版本号编译进程序  https://www.linuxidc.com/Linux/2018-07/153239.htm
Git的工作模式和工作流程 https://www.linuxidc.com/Linux/2018-05/152154.htm
Git建立远程/本地服务器和Git命令的使用 https://www.linuxidc.com/Linux/2018-05/152153.htm
代码版本控制Git工具使用详解 https://www.linuxidc.com/Linux/2018-04/151973.htm
Git重要概念常用命令 https://www.linuxidc.com/Linux/2018-04/151810.htm
Git常用命令总结 https://www.linuxidc.com/Linux/2018-04/151809.htm
Git常用命令整理,详细全面 https://www.linuxidc.com/Linux/2018-04/151805.htm

Git实用技巧和命令 https://www.linuxidc.com/Linux/2018-08/153480.htm

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

栗子博客 软件 Git中的“pull request”真正比较的是什么? https://www.lizi.tw/soft/10534.html

常见问题
  • 1、杰齐1.7仅适用于PHP5.2 2、需Zend支持 3、尽量使用宝塔面板 4、尽量使用Windows 系统,关关对Linux支持不太友好。
查看详情

相关文章

评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务

Git中的“pull request”真正比较的是什么?-海报

分享本文封面