Github从现有克隆中添加一个存储库作为fork


21

所以我有一个git存储库,是从ghithub的上游源克隆的。我对此做了一些更改(未提交且在master分支中)。我要做的是将更改作为新分支推送到我的github页面上,并使github仍将其视为fork。

那可能吗?我是git和github的新手。我的问题甚至有意义吗?

我能想到的最简单的方法(我敢肯定这是最普遍的方法)是在github上存储仓库。在本地将其克隆到其他目录。添加上游原始存储库。在该新的分支存储库中创建一个分支。手动将我的代码更改复制到新的本地存储库中。然后将其推回我的github。

这是一个常见的用例吗,有一种更简单的方法而无需复制目录吗?

我想我在这里问的不是SO,因为我在Linux上使用命令行git,这里的人给出了更好的答案imo =]


我猜想这在技术上是话题,但在其他地方可能会做得更好,因为这似乎主要是一个github问题
Michael Mrozek

Answers:


22

您可以从现有存储库中完成所有操作(无需将fork克隆到新的(本地)存储库中,创建分支,复制提交/更改等)。

  1. 准备好提交您的提交。

    优化任何现有的本地提交(例如使用git commit --amend和/或git rebase --interactive)。

    提交要发布的所有未提交的更改(我不确定您是要暗示您对本地主控机进行了某些提交,也进行了一些未提交的更改,或者只是一些未提交的更改;顺便说一句,未提交的更改不是“在服务器上分支”,它们严格位于您的工作树中)。

    重命名分支,为您的“新分支”命名。这并不是绝对必要的(您可以从任何分支推送到任何其他分支),但是如果您的本地分支和GitHub fork中的分支具有相同的名称,从长远来看,这可能会减少混乱。

    git branch -m master my-feature
    
  2. 将上游GitHub存储库
    (例如)分叉github.com:UpstreamOwner/repostory_name.git
    (例如)github.com:YourUser/repository_name.git

    这是在GitHub网站(或使用GitHub API的“客户端”)上完成的,不涉及本地Git命令。

  3. 在本地存储库(该存储库最初是从上游GitHub存储库中克隆的,并在其master中进行了更改),将fork存储库添加为远程存储库:

    git remote add -f github github.com:YourUser/repository_name.git
    
  4. 将分支推送到GitHub上的fork库。

    git push github my-feature
    
  5. (可选)重命名遥控器,以便您的派生称为“起源”,上游称为“上游”。

    git remote rename origin upstream
    git remote rename github origin
    

    重命名遥控器的原因之一是因为您希望能够在git push不指定存储库的情况下使用它(默认为“原始”)。


可以完美地工作,但是当您创建github远程服务器时,我认为您在Github URL中缺少“ https://”
jesjimher

1
@jesjimher:这篇文章中的“ URL”使用了使用SSH而不是HTTP(S)的“类似于scp的语法”。您还需要将冒号更改为斜杠以将它们用作HTTP(S)URL(假设服务器在不进行其他名称空间更改的情况下支持这两者,而GitHub就是这样做的)。
克里斯·约翰森

糟糕,克里斯,我将冒号误输入为斜线,因此除非我添加“ https”,否则冒号对我不起作用。对不起,噪音...
jesjimher

在第4步中,using -u选项可以使您的本地分支my-feature 跟踪同一远程分支origin/my-feature。命令是:git push -u github my-feature
YaOzI 2016年

那很棒。我唯一需要更改的是github地址!
提克

0

有一个工具: hub

hub是一个命令行工具,用于包装git以扩展其功能和命令,从而使使用GitHub更加容易

现在你可以:

# cd to a cloned repo with uncommited changes
git checkout -b feature
git commit -am 'done with feature'
git fork
git push YOUR_USER feature
# git pull-request
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.