找了一堆文章,发现这个解释比较好,特此转载mark一下。
原文链接
作者:周越
链接:https://www.zhihu.com/question/334230718/answer/743900086
来源:知乎
说明
首先无论 pull request 还是 merge request 都不是 git 本身的功能,而是 GitHub/GitLab 等服务提供的额外功能。
push request 不存在,因为 push 是把你本地的 commit 推到 remote,要么你有权限 push,要么没有,且你没法请别人代你做,因为多数情况下别人没有你本地的 commit。但如果你已经把自己的 commit 给 push 到某处(你有权限的 repo 或分支,且能被其他人访问到),然后想把这些修改合入另一个你没有权限的 repo 或分支,你就可以请求有权限的人帮你 pull 或 merge,所以就有了 pull/merge request。
pull/merge request 分别代表了两种不同的工作流程:
pull request 用于 fork 出来的 repo 之间,一个 repo 希望给另一个 repo 提交代码,常见于 GitHub/GitLab 上公开的代码仓库间协作开发。比如,我想要向某项目 Microsoft/vscode 提交代码,那么我先 fork 出来一个自己的 zhouyue/vscode,修改完成后 git push 到 zhouyue/vscode 某分支上(显然我没有 Microsoft/vscode 的 push 权限),然后通过 GitHub 的网页或者 API 向 Microsoft/vscode 发起一个 pull request,对方如果同意则会从他那边拉取(pull) 我在 zhouyue/vscode 上的代码,我的代码就过去了。因此得名 pull request:我请求对方拉取我(在另一个仓库上)的代码。
merge request 用于同一个 repo 不同分支之间需要合并代码的情况,常见于 GitHub/GitLab 上一个团队共享同一 repo 合作开发。比如我是新员工,没有权限提交代码到 master 分支上,但我可以把修改 push 到一个自己的 zhouyue 分支上,然后我发起一个从 zhouyue 分支到 master 分支的 merge request,如果被批准后,zhouyue 分支则会合并到 master 分支上。因此得名 merge request:我请求有权限的人合并某个分支的代码到同一个仓库的另一个分支上。
网友评论