我不时遇到这个问题。
假设我做了以下阅读 Rails 的源代码,因为我遇到了一些问题。
git clone git://github.com/rails/rails.git
在研究期间,我测试了一些东西,现在我有一个修复,我希望 Rails 核心团队看看。如何将我的更改推送到分叉版本的 rails。
请记住,当我克隆时,我没有克隆一个分叉版本,而是一个只读版本。
并不是说我反对分叉。只是有时我想我只是要浏览然后我想添加一些东西。
我不时遇到这个问题。
假设我做了以下阅读 Rails 的源代码,因为我遇到了一些问题。
git clone git://github.com/rails/rails.git
在研究期间,我测试了一些东西,现在我有一个修复,我希望 Rails 核心团队看看。如何将我的更改推送到分叉版本的 rails。
请记住,当我克隆时,我没有克隆一个分叉版本,而是一个只读版本。
并不是说我反对分叉。只是有时我想我只是要浏览然后我想添加一些东西。
当你克隆一个 repo 时,它会自动设置一个远程调用origin
,它引用你克隆的 repo。这现在指向上游 Rails 项目,但是您需要创建自己的可以推送到的 fork,然后设置一个指向那里的远程,以便您可以推送到它。
第一步,点击上游GitHub项目页面的“Fork”按钮(图片来自GitHub上forking的说明):
完成后,找到并复制该 repo 的 URL。确保使用具有读写访问权限的 SSH URL。它应该类似于git@github.com:nadal/rails.git
,假设您的用户名是nadal
.
现在您可以创建远程,它允许 Git 跟踪远程存储库,根据您拥有的访问权限从其中提取或推送到它。您可以选择替换origin
为您将推送到的那个(即设置了多少人),或者保留origin
指向上游并创建一个新的遥控器。我将展示如何进行第一次设置;第二个应该很容易弄清楚。
要更改origin
为指向您在 GitHub 上的分支,您可能希望将上游分支保留在某个地方,因此将其重命名为upstream
:
git remote rename origin upstream
现在创建一个指向你的 fork 的新远程:
git remote add -f origin git@github.com:nadal/rails.git
现在你应该可以推送到你的新分叉了:
git push origin master
一旦您对推送到 GitHub 的更改感到满意,并希望 Rails 团队的某个人查看它,您有两个选择。一种是使用 GitHub发送拉取请求;请参阅那里的文档以了解如何执行此操作。但是,如果您只有一个或几个小补丁,Rails 团队希望您创建一个 Lighthouse 票证并附上您的补丁;有关更多信息,请参阅有关为 Rails 做出贡献的说明。
编辑这是一个图表,表明发生了什么。您所做的只是克隆上游 rails repo;所以现在您在自己的机器上拥有自己的 repo,它指的git://github.com/rails/rails.git
是origin
:
Github:git://github.com/rails/rails.git ^ | 遥控器:起源 | 你的机器:rails/
如果你分叉然后克隆你的分叉,这就是你得到的:
Github: git://github.com/rails/rails.git <-- git@github.com:nadal/rails.git ^ | 遥控器:起源 | 你的机器:rails/
如果您按照我的说明进行操作,您将获得以下内容:
Github: git://github.com/rails/rails.git <-- git@github.com:nadal/rails.git ^ ^ | | 遥控器:上游来源 | | 你的机器:\-----------------------------rails/
这就像您通过分叉获得的版本一样,除了它还有一个upstream
遥控器,因此您可以跟踪官方更改并将它们合并到您的代码中(如果您创建了分叉版本,您可能希望将upstream
遥控器添加为出色地)。
没关系。如果您愿意,您可以添加另一个遥控器,指定您的非分叉存储库。推动你的改变。
或者,如果您不想分叉,并且取决于维护团队,您可以创建并向他们提交补丁。通常,尽管您可以通过在 github 上分叉(如其他评论中所述)或在您自己的 git repo 上提供您的 repo,并向原始 repo 的维护者提供您希望他们合并的 repo 和分支的信息。