在团队中我承担了Committer 的责任,也就是帮同事们检视代码(Code Review)和合入代码,经常听到有同事在群里喊:“大佬,帮我合个 PR”,“大佬,我刚提交了一个 MR,帮忙合一下,急着出补丁”。我有点懵了,PRMR 到底哪个才是正确的,这两个到底有什么区别,我决定先搞清楚这两个概念再合入他们的代码。[手动滑稽]

什么是Pull Request?

PR 的全称是Pull Request,经常用 Github 的同学对这个肯定很熟悉了。Github 聚集了4000万开发者,过亿的开源项目,如果想给别人的开源仓库贡献代码,通常是先 fork 别人的项目,然后本地修改完成提交到自己的个人 fork 仓库,最后提交 PR 等待别人合入你的代码。

Github 的工作流:

fork 工作流

我们重点看一下第6步,小明写完代码了想合入到原作者的仓库,新建了一个“pull request”,拉请求?这明明是推啊,小明将自己的修改推到原作者的仓,感觉叫“push request”比较合适吧。

既然 Github 坚持叫“pull request”,我们试着理解一下它的思路,小明写完代码了心里肯定是在想:原作者大神,我改了点东西,你快把我的修改拉回去吧。站在原作者的角度思考,叫pull request好像也说得过去,每天有大量的人从我这里 fork 代码走,我只会拉取我感兴趣的代码回来。

我好像把自己说服了。

什么是 Merge Request?

MR 的全称是 Merge Request,相信玩过 Gitlab 的同学都知道这个。

插播一下,Github这么好用了为什么还有人玩 Gitlab,这就要几年前说起了。在微软没有收购 Github 之前,Github 上面所有的项目必须是公开的,也就是说自己很渣的代码也必须要公开,不能藏着噎着。但是在一些小的公司或者创业团队,代码这种核心资产是不希望被公开,他们迫切需要私密仓这种需求,所以很多人都选择了 Gitlab。当然后面 Github 也放开了私有仓库,这是后话了。

merge 工作流

团队中每个人都从远程仓库 develop 分支拉取代码,本地基于 develop 分支新建特性分支,修改完代码将特性分支推到远程仓,紧接着新建 Merge Request 期望将自己的特性分支合入 develop 分支。

从上面这个流程来看Merge Request 就是将自己的特性分支合入到主干分支。

Pull Request VS Merge Request

总结一下上面两个例子。

Github 是玩 fork 模式的,开发者提交自己的代码新建 Pull Request,请求原作者:“把我的代码拉回去吧”。

Gitlab 是玩分支模式的,开发者提交自己的代码新建 Merge Request,想将自己的特性分支合并到主干。

上面总结的好像很有道理,但是不要忘了,Github 也可以玩分支模式,Gitlab 也可以玩 fork 模式,更令人无语的是:

Github 上合并分支还是叫 Pull Request;Gitlab 上fork 模式也是叫 Merge Request;

不行,这种答案我没法接受,去 stackoverflow上搜一些大家是怎么理解的。果然有一个帖子很火:

Pull request vs Merge request

有一个回答摘取了 Gitlab 的官方解释:

Merge or pull requests are created in a git management application and ask an assigned person to merge two branches. Tools such as GitHub and Bitbucket choose the name pull request since the first manual action would be to pull the feature branch. Tools such as GitLab and Gitorious choose the name merge request since that is the final action that is requested of the assignee. In this article we'll refer to them as merge requests.

翻译过来简单理解就是:这两个没有本质区别,站在不同立场说法不一样而已。

好了,官方已经盖棺定论了,这两个就是一个东西,不要纠结啦~

疯狂吐槽

对于初学者来说,Github 的 pull request 确实让人难以理解,我们去各大网站看看用户的声音。

StackOverflow

知乎

从国外到国内都有大量的用户对这个名字不理解,明明是提交提交代码,为什么是 pull request,有些人甚至怀疑是名字打错了。

如果让我来给 Github 取名字,我可能会取:

  • push request 推请求

  • merge request 合并请求

想多了,不会有如果。[嘿哈]

总结

Pull RequestMerge Request 本质上都是合入代码,只是站在不同角度有不同的说法而已,因此在学习和工作中无论用哪一个都没有问题。

另外,一个好的名字对于新手理解这项技术或者业务非常有帮助,比如看到“反向代理”这个名词很多新手是懵的,大家还遇到哪些难以理解的词欢迎在留言区讨论和吐槽。

特别推荐一个分享架构+算法的优质内容,还没关注的小伙伴,可以长按关注一下:

长按订阅更多精彩▼如有收获,点个在看,诚挚感谢

吵疯了,Pull Request到底是个啥?相关推荐

  1. Git中的pull request真正比较的是什么?

    前言 利用git版本控制工具时,我们通常会从主分支拉出新分支进行开发,开发完成后创建pr(也就是pull request),让其他小伙伴帮忙review,确定代码没有问题后再将新分支合并到主分支上.但 ...

  2. 为什么git的“ pull request”不称为“ push request”?

    本文翻译自:Why is a git 'pull request' not called a 'push request'? The terminology used to merge a branc ...

  3. GitHub 中 Merge pull request 的 3 中选项说明

    Merge pull request 提供了 3 种 merge 方法: Create a merge commit:GitHub 的底层操作是 git merge --no-ff.feature 分 ...

  4. git提交pull request到主项目

    标签(空格分隔): GIT ###流程一:如何拉取别人项目并且pull request #####1.fork到自己账号下 首先找到你的共同开发的主项目,然后点击fork,例如下面的图片展示. 点击上 ...

  5. github的pull request是指什么意思?有什么用处

    github的pull request是指什么意思? 来看看某乎某位阿牛的理解,多么的简单粗暴! 我尝试用类比的方法来解释一下 pull reqeust.想想我们中学考试,老师改卷的场景吧.你做的试卷 ...

  6. Github 的 Pull Request 教程

    Github 的 Pull Request 教程 什么是Pull Request 在知乎有一个高赞回答用一个类比的方式解释了什么是PR,这里我就先引述一下,不再重新解释了. 想想我们中学考试,老师改卷 ...

  7. github 修改fork的代码之后如何提交代码并pull request

    官方的解释还是有点模糊,我是参照这篇文章来的. http://www.linuxidc.com/Linux/2012-12/76922.htm 关于git的版本管理的原理,我是从这篇文章里面学习的. ...

  8. GitHub上如何进行PR(Pull Request)操作——简版

    文章目录 一.实现步骤 1.将小红在GitHub上的Repository clone到小明的本地电脑 (1)fork小红在GitHub上的Repository到小明的GitHub (2)clone小明 ...

  9. git 上的pull request 是什么意思?

    1.git 上有常见的pull request 功能 2.pull request 的含义 解释一:    有一个仓库,叫Repo A.你如果要往里贡献代码,首先要Fork这个Repo,于是在你的Gi ...

最新文章

  1. 【Python基础】为什么更改列表'y'也会更改列表'x'?
  2. 嵌入式linux应用程序开发详解_【精品套餐】嵌入式linux应用驱动开发完全学习路线...
  3. 百度十亿级流量的搜索前端,是怎么做架构升级的?
  4. 外卖餐饮点餐系统,连锁餐饮,公众号小程序源码2.1.5
  5. 苹果怒封Google、FB:私下购买用户隐私被制裁,数万员工受牵连
  6. openNLP--Sentence Detector
  7. 饿了么:日订单量超900万的架构设计及演进之路
  8. idea面板右下角的切换分支找不到
  9. 软件开发常用英语单词 - 中、英、英文缩写对照
  10. Qt自定义标题栏可拖动修改窗口大小
  11. bzoj 3640 JC的小苹果
  12. Django models模块字段注释
  13. 在WinForm中回车键(enter)和Esc键的设置
  14. 激光SLAM 前端数据预处理--剔除坏点方法总结
  15. asp.net 鲜花销售系统1058毕业设计
  16. 标签分发协议(LDP)
  17. 如何组织编程教育培训
  18. AD中怎样修改原理图图纸大小
  19. 交易市场中的测不准原理
  20. 各大股票开放接口介绍

热门文章

  1. 安全函数不安全-多线程慎用List.h
  2. 用Scrapy爬虫框架爬取食品论坛数据并存入数据库
  3. 单片机怎么学?新手怎么快速学会单片机?
  4. android怎么模拟返回,Android中障蔽返回键,HOME键以及模拟HOME键返回效果的方法...
  5. c语言 8155 数码管,基于8155的8LED显示串口通信机设计 编程
  6. 接受返回值 server sql_SQL,何必在忆之一(基础篇)
  7. php各种api接口,PHPSAPI接口
  8. android资源替换方案overlay,Android 运行时资源替换----Runtime Resource Overlay
  9. python数据结构与算法分析_数据结构与算法(Python版)
  10. aes离线解密工具_CrazyCrypt2.1勒索病毒已有一键解密工具