【问题标题】:How to do a GitHub pull request如何进行 GitHub 拉取请求
【发布时间】:2013-01-18 19:07:14
【问题描述】:

如何创建和/或发送拉取请求到托管在 GitHub 上的另一个存储库?

【问题讨论】:

  • 这在GitHub help pages中解释得还不够充分吗?
  • @lanzz 不,帮助页面不包含一些有用的提示,我希望在做第一次拉取请求之前知道这些提示(见下文)。
  • @ianzz 当然 Github 的页面是“够用的”,但是有很多方法可以学习。我努力做的是制作一个初学者级别的教程。我发现 Github 的解释中缺少的是:1)它没有包含在一个来源中(两个页面没有明确链接),2)不简洁(那些页面很长,很长=压倒性的),3)是在关键部分没有用人类术语解释。在教学中,经验丰富的老师总是很难知道初学者不知道的东西。设身处地为初学者着想是我写这篇文章的目的。
  • 长时间可能意味着压倒性,这可能意味着中止=没有学习。人们可以通过许多显然不是其中之一的途径“最终理解所涉及的过程”。火焰战争结束,无需回复,我明白你的来历。
  • 您从自己的分叉中发出拉取请求。这绝对不是我最初的假设。

标签: git github pull-request git-fork


【解决方案1】:

为了了解如何提出拉取请求,我只关注了 Github 上的两个单独的帮助页面(下面链接为项目符号)。以下命令行命令适用于 第 1 部分第 2 部分,实际的拉取请求,完全在 Github 的网站上完成。

$ git clone https://github.com/tim-peterson/dwolla-php.git
$ cd dwolla-php
$ git remote add upstream https://github.com/Dwolla/dwolla-php.git
$ git fetch upstream
// make your changes to this newly cloned, local repo 
$ git add .
$ git commit -m '1st commit to dwolla'
$ git push origin master
  • 第 1 部分:fork 某人的 repo:https://help.github.com/articles/fork-a-repo

    1. 点击你想贡献的repo上的'fork'按钮,在这种情况下:Dwolla's PHP repo (Dwolla/dwolla-php)
    2. 获取新创建的 fork 的 URL,在本例中为:https://github.com/tim-peterson/dwolla-php.git (tim-peterson/dwolla-php)
    3. 键入上面的git clone->cd dwolla-php->git remote->git fetch 序列以克隆您计算机中某处的fork(即,“复制/粘贴”到,在本例中为:third_party TimPeterson$)并将其与主存储库同步(Dwolla/dwolla-php )
    4. 对本地存储库进行更改
    5. 键入上面的git add->git commit->git push 序列,将您的更改推送到远程仓库,即您在 Github 上的 fork (tim-peterson/dwolla-php)
  • 第 2 部分:发出拉取请求:https://help.github.com/articles/using-pull-requests

    1. 在 Github (https://github.com/tim-peterson/dwolla-php) 上转到 你的 fork 的网页
    2. 点击“拉取请求”按钮
    3. 为拉取请求命名,填写您所做更改的详细信息,点击提交按钮。
    4. 大功告成!!

【讨论】:

  • 是的。谢谢你。我可以遵循的一个工作示例。为什么你没有那个 git hub?
  • git fetch upstream 之后,您不需要将上游更改与本地副本合并,使用git checkout master 然后使用git merge upstream/master
  • @Sparhawk 不,您不需要将您的更改合并到驻留在您的 fork 中的 master 中。对另一个 repo 的拉取请求可以完全基于分支。但是,您最好也随时更新 fork 的 master,以便更改“真实”存储库并经常在您的 fork 存储库中返回循环。
  • @HimanshuShekhar 是的,但您需要使用 github 桌面应用程序或其 API。浏览器对我来说更容易。
【解决方案2】:

(除了官方的“GitHub Help 'Using pull requests' page”,
另见“Forking vs. Branching in GitHub”、“What is the difference between origin and upstream in GitHub”)

关于拉取请求的几个技巧:

假设你有第一个 forked a repo,那么你应该在你拥有的那个 fork 中执行以下操作:

  • 创建一个分支:将您的修改隔离在一个分支中。不要从 master 创建拉取请求,您可能会想一次累积和混合几个修改。
  • 重新定位该分支:即使您已经从该分支发出拉取请求,将其重新定位在 origin/master 之上(确保您的补丁仍在工作)将自动更新拉取请求(无需点击任何东西)
  • 更新该分支:如果您的拉取请求被拒绝,您只需添加新的提交,和/或完全重做您的历史记录:它将再次激活您现有的拉取请求。
  • “聚焦”那个分支:即,使其主题“紧”,不要修改数千个类和所有应用程序,只添加或修复一个明确定义的功能,保留更改小
  • 删除该分支:一旦被接受,您就可以安全地删除您 fork 上的该分支(以及 git remote prune origin)。 GitHub GUI 将建议您在拉取请求页面中删除您的分支。

注意:要编写 Pull-Request 本身,请参阅“How to write the perfect pull request”(2015 年 1 月,GitHub)


2016 年 3 月:新的 PR 合并按钮选项:请参阅“Github squash commits from web interface on pull request after review comments?”。

repo 的维护者可以选择merge --squash那些 PR 提交。


在拉取请求之后

关于最后一点,自 2013 年 4 月 10 日起,“Redesigned merge button”,为您删除了分支:

合并后删除分支也得到了简化。
我们不再通过额外的步骤确认删除,而是在您删除分支时立即将其删除,并提供方便的链接以在事件中恢复分支你又需要它了

这证实了在合并拉取请求后删除分支的最佳做法。


拉请求与请求拉


“存储库”的电子笔记(原文如此)

<humour>

GitHub 甚至没有正确定义那个(拉取请求)!

幸运的是,真正的商业新闻机构会知道,并且有一个e-note in order to replace pull-replace by 'e-note'

因此,如果您的存储库o需要电子笔记...ask Fox Business。他们是知情的。

</humour>

【讨论】:

  • -@VonC 谢谢你。您介意提供一些代码来指出您所说的与我所说的有何不同吗? branchmaster 的决定似乎对于将我/Github 的答案从理论解决方案转变为实际使用的解决方案至关重要。
  • @timpeterson 您可以完全更改该分支中的历史记录,并且它会自动更新拉取请求这一事实是关键:因为拉取请求必须是在最新的上游项目上完成。如果该上游仓库有新的提交,您必须在其之上重新设置您的分支(更改该分支的历史记录),并将其推送回您的 fork:这将自动更新您的拉取请求(基于同一分支)。
  • 我不理解变基部分。那有什么作用? (this page 听起来像是火箭科学,但我相信不是)。你会在那个时候发出什么命令来“变基”?
  • @CamiloMartin 如果您在公关部门,那么git pull --rebase upstream/master 确实很好。
  • @vikramvi master 是一个与您分叉的原始存储库相同的分支。该分支应始终反映原始存储库。您将修复隔离在 PR 的分支中。您仅将 master 用作了解原始存储库中内容的一种方式(并将您的修复分支重新设置在它之上,以确保轻松合并请求)
【解决方案3】:

我遵循了 tim peterson 的指示,但我为我的更改创建了一个本地分支。但是,在推送之后,我在 GitHub 中没有看到新的分支。解决方案是在 push 命令中添加 -u:

git push -u origin <branch>

【讨论】:

  • 您注意到上面网址中的 2 个用户名了吗?第一个是tim-peterson 第二个是Dwolla
  • 另外,作为对我的回答的评论更好。你可能会得到一些反对意见。
【解决方案4】:

要发出拉取请求,您需要执行以下步骤:

  1. 分叉一个存储库(您要向其发出拉取请求)。只需单击存储库页面的 fork 按钮,您将拥有一个单独的 github 存储库,前面带有您的 github 用户名。
  2. 将存储库克隆到本地计算机。您安装在本地机器上的 Github 软件可以为您完成这项工作。单击存储库名称旁边的克隆按钮。
  3. 对文件进行本地更改/提交
  4. 同步更改
  5. 转到您的 github 分叉存储库,然后单击分支按钮旁边的“比较和审查”绿色按钮。 (按钮有图标 - 没有文字)
  6. 将打开一个新页面,显示您的更改,然后单击拉取请求链接,该链接会将请求发送给您分叉的存储库的原始所有者。

我花了一段时间才弄清楚这一点,希望这会对某人有所帮助。

【讨论】:

  • 我不清楚您需要在能够提出拉取请求之前分叉一个 repo。我认为推送的提交只会转到某种具有公共写访问权限的待处理分支,然后从那里合并。谢谢!
【解决方案5】:

对于我们这些拥有 github.com 帐户,但在命令行中键入“git”时只会收到令人讨厌的错误消息的人,以下是如何在浏览器中完成所有操作:)

  1. 正如 Tim 和 Farhan 所写: Fork 您自己的项目副本:
  2. 几秒钟后,您将被重定向到您自己的项目分叉副本:
  3. 导航到您需要更改的文件,然后单击工具栏中的“编辑此文件”:
  4. 编辑后,写几句话来描述更改,然后“提交更改”,就像主分支一样(因为这只是您自己的副本,而不是“主”项目)。
  5. 对您需要编辑的所有文件重复第 3 步和第 4 步,然后返回到项目您的副本的根目录。在那里,单击绿色的“比较,审查...”按钮:
  6. 最后,在您仔细检查了请求的标题和描述后,单击“创建拉取请求”......然后单击“创建拉取请求”再次

【讨论】:

  • 让人们学习命令行,最终效率更高:)
【解决方案6】:

我已经启动了一个项目来帮助人们提出他们的第一个 GitHub 拉取请求。可以发教程到make your first PR here

工作流程很简单

  • fork github 中的 repo
  • 通过点击克隆 repo 按钮获取克隆 url
  • 转到终端并运行git clone &lt;clone url you copied earlier&gt;
  • 为您所做的更改创建一个分支git checkout -b branch-name
  • 进行必要的更改
  • 提交您的更改git commit
  • 将您的更改推送到 GitHub git push origin branch-name 上的 fork
  • 转到 GitHub 上的 fork 以查看 Compare and pull request 按钮
  • 点击它并提供必要的详细信息

【讨论】:

    【解决方案7】:

    我编写了一个 bash 程序,它为您完成了建立 PR 分支的所有工作。如果需要,它会执行分叉、与上游同步、设置上游远程等,您只需要提交修改、推送和提交 PR。

    这是你的运行方式:

    github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature
    

    您会发现程序 here 及其存储库还包括一个分步指南,如果您想了解它是如何工作的,可以手动执行相同的过程,以及有关如何保留您的功能的额外信息与上游 master 和其他有用的花絮保持同步。

    【讨论】:

      【解决方案8】:

      最简单的 GitHub 拉取请求来自网络界面,无需使用 git。

      1. 注册一个 GitHub 帐户,登录然后转到您要更改的存储库中的页面。
      2. 点击铅笔图标,

        搜索该位置附近的文字,进行所需的任何编辑,然后预览以进行确认。为建议的更改提供最多 50 个字符的说明,并可选择扩展说明,然后单击Propose file Change 按钮。

      3. 如果您正在阅读本文,您将没有对存储库(项目文件夹)的写入权限,因此 GitHub 将在您的帐户中创建存储库的副本(实际上是一个分支)。点击创建拉取请求按钮。

      4. 为拉取请求提供描述并添加任何 cmets,然后单击创建拉取请求按钮。

      【讨论】:

        猜你喜欢
        • 2012-01-11
        • 1970-01-01
        • 2018-02-04
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        • 1970-01-01
        • 2013-06-09
        • 2016-12-26
        相关资源
        最近更新 更多