如何创建和/或向 GitHub 上托管的另一个存储库发送拉取请求?
8 回答
(除了官方的“ GitHub Help 'Using pull requests'页面”,
另见“ GitHub中的Forking vs. Branching ”、“ GitHub中origin和upstream有什么区别”)
关于拉取请求的几个技巧:
假设您首先分叉了一个 repo,那么您应该在您拥有的那个分叉中执行以下操作:
- 创建一个分支:将您的修改隔离在一个分支中。不要从 中创建拉取请求
master
,您可能会想一次累积和混合多个修改。 - 重新设置该分支:即使您已经从该分支发出了拉取请求,将其重新设置为基础
origin/master
(确保您的补丁仍在工作)将自动更新拉取请求(无需单击任何内容) - 更新该分支:如果您的拉取请求被拒绝,您只需添加新的提交,和/或完全重做您的历史记录:它将再次激活您现有的拉取请求。
- “聚焦”该分支:即,使其主题“紧凑”,不要修改数千个类和所有应用程序,只添加或修复一个明确定义的功能,保持较小的更改。
- 删除那个分支:一旦被接受,你就可以安全地删除你的 fork(和
git remote prune origin
)上的那个分支。GitHub GUI 将建议您在拉取请求页面中删除您的分支。
注意:要编写Pull-Request 本身,请参阅“如何编写完美的 pull request ”(2015 年 1 月,GitHub)
2016 年 3 月:新的 PR 合并按钮选项:请参阅“ Github squash commits from web interface on pull request after review comments? ”。
仓库的维护者可以选择merge --squash
那些 PR 提交。
拉取请求之后
关于最后一点,自 2013 年 4 月 10 日起,“重新设计的合并按钮”,为您删除了分支:
合并后删除分支也得到了简化。
我们不会通过额外的步骤确认删除,而是在您删除分支时立即删除它,并提供方便的链接以在您再次需要时恢复分支。
这证实了在合并拉取请求后删除分支的最佳实践。
拉取请求与请求拉取
拉取请求不是官方的“git”术语。
Git 使用request-pull
(!) 命令构建合并请求:
它“将两次提交之间的更改汇总到标准输出,并在生成的摘要中包含给定的 URL。” Github在第一天(2008 年 2 月)
推出了自己的版本,但在 2010 年 5 月重新设计了该功能,声明:Pull Request = Compare View + Issues + Commit comments
“存储库”的电子笔记(原文如此)
<humour>
GitHub 甚至没有正确定义那个(拉取请求)!
幸运的是,真正的商业新闻机构会知道,并且有一个e-note 可以将 pull-replace 替换为 'e-note':
因此,如果您的存储库需要电子笔记……请咨询Fox Business。他们是知情的。
</humour>
为了了解如何提出拉取请求,我只关注了 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 部分:分叉某人的仓库:https ://help.github.com/articles/fork-a-repo
- 点击你想要贡献的repo上的'fork'按钮,在这种情况下:Dwolla's PHP repo (Dwolla/dwolla-php)
- 获取新创建的 fork 的 URL,在本例中为:https ://github.com/tim-peterson/dwolla-php.git (tim-peterson/dwolla-php)
- 键入
git clone->cd dwolla-php->git remote->git fetch
上面的序列以在计算机中的某个位置克隆您的 fork(即,“复制/粘贴”到,在这种情况下third_party TimPeterson$
:)并将其与主存储库同步(Dwolla/dwolla-php) - 对本地仓库进行更改
- 键入
git add->git commit->git push
上面的序列以将您的更改推送到远程仓库,即您在 Github 上的 fork (tim-peterson/dwolla-php)
第 2 部分:提出拉取请求:https ://help.github.com/articles/using-pull-requests
- 转到Github 上的 fork网页(https://github.com/tim-peterson/dwolla-php)
- 单击“拉请求”按钮
- 为 pull-request 命名,填写您所做更改的详细信息,然后单击提交按钮。
- 你完成了!!
为了提出拉取请求,您需要执行以下步骤:
- 分叉一个存储库(您要向其发出拉取请求)。只需单击存储库页面的分叉按钮,您将拥有一个单独的 github 存储库,前面带有您的 github 用户名。
- 将存储库克隆到本地计算机。您安装在本地机器上的 Github 软件可以为您完成这项工作。单击存储库名称旁边的克隆按钮。
- 对文件进行本地更改/提交
- 同步更改
- 转到您的 github 分叉存储库,然后单击分支按钮旁边的“比较和审查”绿色按钮。(按钮有图标 - 没有文字)
- 将打开一个新页面,显示您的更改,然后单击拉取请求链接,该链接会将请求发送给您分叉的存储库的原始所有者。
我花了一段时间才弄清楚这一点,希望这会对某人有所帮助。
我已经启动了一个项目来帮助人们提出他们的第一个 GitHub 拉取请求。您可以在此处完成动手教程来制作您的第一个 PR
工作流程很简单
- 在 github 上 fork 仓库
- 通过单击克隆 repo 按钮获取克隆 url
- 转到终端并运行
git clone <clone url you copied earlier>
- 为您所做的更改创建一个分支
git checkout -b branch-name
- 进行必要的更改
- 提交您的更改
git commit
- 将您的更改推送到 GitHub 上的 fork
git push origin branch-name
- 转到 GitHub 上的 fork 以查看
Compare and pull request
按钮 - 单击它并提供必要的详细信息
对于我们这些拥有 github.com 帐户,但在命令行中键入“git”时只会收到令人讨厌的错误消息的人,这里是如何在浏览器中完成所有操作:)
我遵循了 tim peterson 的指示,但我为我的更改创建了一个本地分支。但是,在推送之后,我在 GitHub 中没有看到新的分支。解决方案是将 -u 添加到 push 命令中:
git push -u origin <branch>
我编写了一个 bash 程序,它为您完成了设置 PR 分支的所有工作。如果需要,它会执行分叉、与上游同步、设置上游远程等,您只需要提交修改、推送和提交 PR。
这是你如何运行它:
github-make-pr-branch ssh your-github-username orig_repo_user orig_repo_name new-feature
如果您想了解它的工作原理,您将在此处找到该程序及其存储库还包括手动执行相同过程的分步指南,以及有关如何使您的功能分支保持最新的额外信息与上游大师和其他有用的花絮约会。
最简单的 GitHub 拉取请求来自 Web 界面,不使用 git。
- 注册一个 GitHub 帐户,登录然后转到您要更改的存储库中的页面。
点击铅笔图标,
搜索该位置附近的文本,进行任何您想要的编辑,然后预览它们以确认。为提议的更改提供最多 50 个字符的描述,并可选择扩展描述,然后单击提议文件更改按钮。
如果您正在阅读本文,您将没有对存储库(项目文件夹)的写入权限,因此 GitHub 将在您的帐户中创建存储库的副本(实际上是一个分支)。单击创建拉取请求按钮。
- 为拉取请求提供描述并添加任何评论,然后单击创建拉取请求按钮。