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


448

用于将分支与正式存储库合并的术语是“拉请求”。这很令人困惑,因为我似乎要求将所做的更改推送到官方存储库。

为什么将其称为拉取请求而不是推入请求?


45
想象一棵大的活树。该树太坚固,无法将树枝推入,而是必须要求该树将树枝拉入树干,以加强其强度。
路加福音


2
如果使用的远程存储库(例如gitihub),则维护者通过命令行执行的最后命令之一是git push。对我来说,这一切...(是的,他们可能会发出git pull,然后发出git push,但要求进行该推送,并且最终将完成此操作)
ebyrob

60
GitLab称呼他们merge requests。更加清晰,恕我直言。:)
U007D '16

Answers:


377

如果您的存储库中有代码更改,并且想要将其移动到目标存储库,则:

  • “推送”是您强制目标存储库(git push)中存在更改。
  • “拉”是目标存储库,用于获取您的更改(git pull从另一个存储库中获取)。

“拉取请求”是您请求目标存储库,以获取您的更改。

“推送请求”将是请求您推送更改的目标存储库。


21
这对我来说也是一个问题,命名约定:D&u使它更容易理解。可以用与银行中的货币买卖方式相同的方式来思考它。
nsuinteger 2014年

我认为您需要重新定义“拉”的定义,因为“目标存储库”,“您的更改”令人困惑。也许您想说,“您的存储库正在从目标存储库中获取更改”?
MrPisarik '16

9
关键思想是使用“推” /“拉”术语来标识最终决定是否进行转移的一方,而不是创建要转移信息的一方。
杰西·里德尔

3
这取决于是你要求的,如果是你的团队“推送请求”更有意义,如果是远程仓库的绝对正确。
A77

2
在公司中使用中央私有Git服务器时,通常您可以向其推送新分支,并请求代码审查并与您的同事合并。因此,对此工作流的“拉取请求”在技术上并不正确,但事实证明,它是每个人和GUI设计人员选择的术语。

88

发送拉取请求时,您要(请求)正式的回购所有者从您的回购中拉取一些更改。因此“拉请求”。


2
但所有者将在批准后发布git合并
Jervie Vitriolo

2
git pull是获取和合并的组合,因此pull已经意味着合并。
熊加米奥夫

36

tl; dr,因为不允许我进行推送,所以我会很好地向回购所有者发出请求,以便他们决定撤回


谁可以将代码推送到存储库?

如果有人(可能是邪恶的,未受过教育的或未知的)可以来这里说我只是将其推送到您的master分支,并弄乱了您所有的代码,哈哈!

当然,您不希望他这样做。默认情况下,设置了安全网,因此没有人可以推送到您的仓库。您可以 将其他人设置为协作者,然后他们可以进行推送。您可以将这种访问权限授予您信任的人。

因此,如果您不是协作者并尝试进行推送,则会收到一些错误消息,表明您没有权限。


那么其他开发者如何才能推送到他们没有被允许推送的仓库呢?
你不能给任何人访问,但你想给别人一个出口/入口点,使他们能够做出“以回购所有者要求这个代码进入回购”。简单地说,通过使存储库易于访问,他们就可以对其进行分叉...在自己的分叉中进行更改。自己的更改自己的叉子上。一旦进入他们自己的远程仓库中:

他们从自己的叉子发出拉取请求,上游仓库的所有者(您不能直接将其推入)将决定是否合并拉取请求。


我也建议阅读一个半相关的问题,git push到底会发生什么?为什么不像git merge一样考虑git push?


4
对于没有意识到推与拉之间存在许可差异的人们,这个答案很有道理。
buddie '17

29

拉取要求:我要求拉取我的。


7
我作为用户从我的角度来看它,这不应该是“我请求将其推给您吗?” I >>> You -您在相同的环境中两次更改了参考点……而不是I >>>> You <<<< Mine
Marin

1
这个答案最有意义。
shivams

轻松撒尿柠檬
IvanIvković

我要求你从那里拉我的……。我了解这将来自原始项目的分支?还是本地副本?
KansaiRobot

5

我想将某些内容推送到其他人的仓库中。

我没有推(或拉)的权限。

所有者/合作者具有权限。他们既可以拉也可以推。我不能推。

因此,我要求他们从我这里进行拉取-间接意味着我正在要求他们接受我的请求。

因此,没有要求推送。只为拉。并接受推。

因此,“拉”请求。而不是“推送”请求。


4

这些操作中的关键是“请求”一词。您也可以这样说:“我有要求您接受我的工作,您接受吗?” -“请求请求”。

起初有点令人困惑,但最终还是有道理的。


1

为了更好地理解并永远记住它,您需要对其进行描绘。

想象一棵大的活树{作为您的仓库}。这棵树太坚固了,您不能将分支推入其中或在其中添加新的部分{象征创建一个新分支或在其中推入代码},相反,您必须要求树将分支拉入树干或将其插入树干。改变了你。

术语“拉取请求”来自分布式性质。不仅仅是将更改推送到存储库中(就像使用集中式存储库(例如,使用Subversion)一样),您还可以分别发布更改并要求维护人员提取更改。然后,维护人员可以查看所做的更改并执行“拉”操作。

因此,您基本上是“请求”那些具有要访问的回购的写入权限的人,然后从您的回购中“拉出”。

拉取请求可让您告诉其他人已推送到GitHub信息库中分支的更改。打开拉取请求后,您可以与协作者讨论和审查潜在的更改,并在更改合并到基础分支之前添加后续提交。 Github说明


0

我认为这是一个愚蠢的用语,因为我想认为想向您推销某些东西,而不是反过来要求别人要求我添加矿物质。因此,应将其更改为PUSH REQ。因为我是最活跃的部分 箭头以相反的方式从我开始,而不是另一端的高飞。恕我直言。


0

这样想。 本地存储库远程存储库。

  • 当您从本地推送时。(git push) -换句话说,远程存储库从你的代码(本地)。

您正在要求一些东西。所以,问问自己

  • 你想远程仓库从你的代码?- 拉取请求。

我认为,必须区分不能发出推送请求,这一点很重要。如果您可以推送而这样做,则不是请求,它将与主服务器合并。向git hub存储库的拉取请求是您请求合并代码。
詹姆斯(James)

我仅以此为例。当然,Github可以推送代码。但我将编辑答案。
Jin Lim

0

恐怕这些答案中的大多数都解决了这个问题,“拉动请求”是什么意思?“推送请求”是什么意思?而不是OP的问题:为什么将其称为请求请求而不是请求请求?

通常,这种问题替换是可以接受的,但是在这种情况下,很明显,OP知道这些替换问题的答案,因此回答它们不是很有帮助。

只有GitHub上创造该术语的人才能确定。但是,很明显,该术语选择反映了类似以下有关“从外部进入存储库的更改”现象的观点:维护者执行操作(拉动)

但是,请求也是一个动作,该动作的执行者不是维护者,而是提交者(谁做了更多的动作,即工作)。因此,“拉取请求”一词使人对代理人感到困惑。最终,由于请求的递归性质而引起混乱:请求既是主代理的动作,又是第二代理对将来动作的请求。

这种情况非常类似于现在常见的语言结构,例如“我们盖房子”(代替“我们付钱给别人盖房子”),主要行动的责任从明显的原始代理人转移到了履行管理社会角色的二级代理。

可以由此得出结论,术语选择的原因是管理工作是一流劳动的观点合法化。此外,对这种术语选择感到困惑的原因可能是非管理人员自然会有不同的观点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.