拉取请求是一个人向另一个人提出的请求(因此是名称的“请求”部分)。暂时假设你是第二个人。该请求要求您从其他 Git 存储库获取 (git fetch) 然后 git merge (fetch+merge = pull,因此名称名称的“拉”部分) 一些提交。也就是说,发出请求的人要求可以执行请求的人运行git pull,并给出请求者的存储库的名称或 URL。
GitHub 拉取请求是同样的基本思想,添加了许多 GitHub 特定的脚手架,以使作为 GitHub 用户的您更容易完成所涉及的各个步骤。 “原始”Git 要求您自己完成这些步骤,而不是单击一个绿色的大为我做事,所以我不必考虑 按钮。 GitHub 风格的优点是不用思考;缺点是后来很多人不考虑。
如果您确实考虑一下它是如何工作的,最终会变得很明显:您根本不会获得提交的更改。你要么得到提交,要么你没有得到提交。这就是你可以通过提交来做的事情:你可以使用git fetch 来获取它。一旦你拥有它,你就可以用它做更多的事情。
如果你已经拥有提交——因为你是在发送到你自己的 GitHub存储库之前提交的,例如,在发出拉取请求之前——你不需要需要得到它。只需使用本地 Git 来处理它。如果它在其他一些 GitHub 存储库中,您将需要:
- 添加一个 remote 以便为 URL 命名,然后
- 使用
git fetch(可能还有其他Git 命令)来获取(或者做一些事情)提交。1
当 GitHub 拉取请求位于您可以像这样阅读的某个存储库中时,为该存储库选择一个名称(这里的常见远程名称是 upstream,但名称取决于您)并运行:
git remote add upstream <insert correct URL here>
(如果你愿意,可以从 upstream 更改名称)。然后,使用git fetch。这需要一些棘手的东西,因为 GitHub 将拉取请求隐藏在自己的系统后面:
git fetch upstream +refs/pull/<number>/head:refs/heads/pr<number>
例如,将在您自己的存储库中创建或强制更新一个名为 pr<em>number</em> 的 分支,该分支来自其存储库中具有给定编号的拉取请求。
您现在在名为 pr<em>number</em> 的分支中拥有提交,并且可以像往常一样使用它们。
同样,如果你提出了拉取请求,你已经有提交,可能在一个分支中,你不需要做所有这些。只需与他们合作。
1可以使用git pull 组合这些步骤,并使用原始 URL 而不是远程 URL。在您非常熟悉 git pull 运行的所有步骤之前,我建议您避免这样做。