我不时会遇到这个问题.
假设我已经按照以下方式阅读了rails的源代码,因为我遇到了一些问题.
git clone git://github.com/rails/rails.git
在研究期间,我测试了一些东西,现在我有一个修复,我希望rails核心团队来看看.如何将我的更改推送到分叉版本的rails.
记得当我克隆时,我没有克隆分叉版本而是只读版本.
并不是说我反对分叉.只是有时我认为我只是要浏览然后我想添加一些东西.
克隆存储库时,它会自动设置一个名为的遥控器,该遥控器origin
引用您克隆的存储库.现在指向上游的Rails项目,但你需要的是创建自己的fork,你可以推送到它,然后设置一个指向那里的遥控器,以便你可以推送它.
第一步是单击上游GitHub项目页面上的"Fork"按钮(图片来自GitHub关于分叉的说明):
完成后,找到并复制该repo的URL.确保使用具有读写访问权限的SSH URL.应该是这样的git@github.com:nadal/rails.git
,假设您的用户名是nadal
.
现在您可以创建远程,它允许Git跟踪远程存储库,从中提取或推送到远程存储库,具体取决于您拥有的访问权限.你可以选择替换origin
你要推送的那个(这是设置了多少人),或者origin
指向上游而不是创建一个新的遥控器.我将展示如何进行第一次设置; 第二个应该很容易理解.
要更改origin
为指向GitHub上的fork,您可能希望将上游分支保留在某处,因此将其重命名为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做出贡献的说明.
编辑这是一个图表,表明发生了什么.你所做的只是克隆上游铁路仓库; 所以现在你在自己的机器上拥有自己的仓库,它指的git://github.com/rails/rails.git
是origin
:
Github: git://github.com/rails/rails.git ^ | Remotes: origin | Your machine: rails/
如果你分叉然后克隆你的叉子,这就是你得到的:
Github: git://github.com/rails/rails.git <-- git@github.com:nadal/rails.git ^ | Remotes: origin | Your machine: rails/
如果你按照我的指示,这将是你将得到的:
Github: git://github.com/rails/rails.git <-- git@github.com:nadal/rails.git ^ ^ | | Remotes: upstream origin | | Your machine: \-------------------------------rails/
这就像你通过分叉获得的版本一样,除了它还有一个upstream
遥控器,所以你可以跟踪官方更改并将它们合并到你的代码中(如果你创建了分叉版本,你可能想要添加upstream
遥控器好).