如何从克隆的仓库提交pull request?

104

如何从已经本地克隆的仓库中提交拉取请求?

通常,我想查看一些GitHub上的代码库的源代码,所以我将其克隆下来。后来,我发现了一些代码问题并在邮件列表中提出了这个问题。库的作者说“很好的发现,你能发送一个拉取请求吗?”

答案是“不是那么容易”。我还没有 fork 该仓库,而是克隆了它。似乎找不到一种方法可以从已经克隆的仓库中提交拉取请求。

如果这个限制是真实存在的,那么明智的做法好像是 fork 所有你想要查看的内容,这样如果你想要贡献,你就可以了。但这会使你的GitHub账户中充满了许多不活跃的forks。

关于这个问题似乎没有太多的讨论 - 我是唯一受到这个问题影响的人吗?


4
由于注意到这个非常相似的问题:https://dev59.com/hW855IYBdhLWcg3wq2XL - Ben Hutchison
3个回答

75
在 GitHub 上 fork 该项目,然后将你的 fork 添加为本地克隆副本的远程仓库:

Fork the repo on GitHub, then add your fork repo as a remote to your local cloned copy:


git remote add myfork https://github.com/<myGitHubAccountName>/<repoName>.git

然后您可以将更改推送到您的分支:

git push myfork master

如果您不只是进行此次拉取请求,可以删除 origin 远程,并将您的分支重命名为 origin:

git remote rm origin
git remote add origin https://github.com/<myGitHubAccountName>/<repoName>.git

这通常是我的做法。有时我将原始源代码标记为upstream,以便仍然可以参考它。


6
不使用分支,如何完成这个操作? - Russia Must Remove Putin
3
如果您有一个仓库的推送访问权限,您可以在该仓库的分支之间打开拉取请求。您需要将本地分支推送到origin的新分支名称上,例如git push origin HEAD:my-feature。然后,您可以使用Web UI从my-featuremaster打开拉取请求。 - bobthecow
14
@Torek - 又是一个糟糕的工作流程。执行一个简单的操作难道真的这么困难吗?我以为这是Git的主要目标之一——在分散模式下使协作和补丁共享变得容易。从事基本工作流应该是简单易行的目标,不需要火箭科学家来推断。那些人需要聘请一个用户体验专家,因为他们都缺乏自己解决这个问题的常识。 - jww

11

如果您可以接受在路径中安装另一个二进制文件,GitHub发布了一个名为hub的不错工具。

如果您克隆了别人的仓库:

$ hub fork  # This creates a fork and adds your repo as a remote

$ git push YOUR_USER feature  # push the changes to your new remote

$ hub pull-request  # will open your browser

谢谢分享关于Hub的信息,我很喜欢它 :) 我曾经处于这种情况,而Hub让我的工作变得非常方便。 - Wahib Ul Haq
需要注意的是,“hub fork” 仍会在您的 GitHub 帐户上创建分叉存储库。 - Granger

0
我也总是选择克隆而不是分叉,以下步骤适用于我:
  1. 在克隆的存储库上创建一个新分支并进行更改。
  2. 将更改推送到您的分支,如下所示:

    git push origin insert_your_working_branch_name

  3. 现在,您应该能够在来自github主分支的拉取请求中找到您的工作分支。


4
如果你克隆了别人的代码库,你没有推送权限,我不明白上面第二步是如何实现的。 - Ben Hutchison
这对我有用。第一步,使用git branch yourbranchname,git checkout yourbranchname,然后您可以使用第二步中的命令。 - ssy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接