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

为什么它被称为拉请求而不是推请求?


当前回答

为了更好地理解它并永远记住它,你需要描绘它。

想象一个大的、活的树(作为您的存储库)。这棵树太坚固了,你不能将一个分支推入或添加一个新部分(象征创建一个新分支或你将代码推入其中),相反,你必须要求这棵树将一个分支拉入主干或从你那里获得更改。

术语“拉请求”来自于分布式的本质。而不是仅仅将您的更改推入存储库(就像您使用集中式存储库所做的那样,例如Subversion),您将单独发布您的更改,并要求维护者拉入您的更改。然后维护者可以查看更改并执行所谓的拉取。

所以你基本上是“请求”那些对你想要贡献的回购有写权限的人,从你的回购中“拉”出来。

Pull请求可以让你告诉其他人你已经推送到GitHub存储库分支的更改。一旦打开了拉取请求,您就可以与协作者讨论和检查潜在的更改,并在将更改合并到基本分支之前添加后续提交。 Github的解释

其他回答

简单地说,因为您请求Pull(获得一份副本)代码,但在Push中,您请求通过将代码推入目标来集成代码。

我认为这是一个愚蠢的术语,因为我想认为我想把一些东西推给你,而不是反过来要求别人拉我的添加。所以应该改为PUSH REQ。因为我是主动的那部分箭头指向相反的方向从我开始,而不是另一端的高飞。恕我直言。

git拉取意味着我从存储库中拉取。

git推送意味着我正在推送到存储库。

一个拉取请求自然会随之而来,我在问回购所有者我可以从他们的存储库中拉取,对吧?

错误,拉请求意味着我请求(本质上)推送到存储库。

这背后的假定逻辑是,存储库现在本质上是命令的所有者。但如果是这种情况,那么从存储库中检索代码将通过git push实现。因为如果存储库是所有者,那么他们就全权负责将代码推送给您。但是没有。不一致是关键。

公认的答案是,“push”听起来像是您在强迫存储库进行更改,但这毫无意义,因为您看不到它是一个REQUEST。请求,就其本质而言,并不是强加于人的。

“请求”这个词是这些操作的关键。你也可以把它想象成“我有个请求让你接手我的工作,你接受吗?”-“拉请求”。

一开始会有点困惑,但最终会有意义。

既然我不被允许出手,我就很好地向回购所有者提出请求,让他们决定退出


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

如果有人(可能是邪恶的、没受过教育的或未知的)能够来这里说,我刚刚把这个推到你的主分支,搞砸了你所有的代码,哈哈哈!?

你肯定不希望他那样做吧。默认情况下设置了一个安全网,所以没有人可以推动你的回购。你可以把其他人设置为合作者,然后他们可以推动。你会把这样的机会给你信任的人。

所以如果你不是一个合作者,尝试推送,你会得到一些错误,表明你没有权限。


那么,其他开发商如何推动他们没有获得许可的回购呢? 你不能给每个人访问权限,但你想给其他人一个出口/入口点,这样他们就可以“向回购所有者请求将此代码拉入回购”。简单地说,通过使回购可访问,他们可以分叉…在自己的fork中进行更改。将他们的更改推到他们自己的fork上。一旦它在他们自己的远程回购:

他们从他们的分叉发出一个拉取请求,上游回购的所有者(你不能直接推到)将决定是否合并拉取请求。


换个角度解释一下:

推送是指你(通常)不需要任何人批准的事情,例如,你总是可以推送到你自己创建并一直致力于的功能分支。

虽然您可以在您自己创建的两个分支之间创建一个拉请求,并可以将其推入。你几乎从不这样做。

当我致力于一个大型功能并且已经批准了我的pull请求时,我便这么做了,但我需要做出一些棘手的改变,所以我便针对我现有的分支创建了PR。

如果你需要别人的认可,那你就不要强迫别人。你希望别人:

回顾你的分支 给你批准 去拿你的树枝 与master合并

(3+4 = git pull)


顺便说一句,你可能会问,为什么它不被命名为“合并请求”?

我发现最好的答案是,如果你只是直接提交到main -没有多个功能分支,那么你永远不会有merge(两个父组成一个子)提交。所有的提交都是对前一个提交的新提交。因此,名称“合并提交”将不适用。


还有一个半相关的问题,我推荐阅读git推送到底发生了什么?为什么git push不像git merge那样被考虑?