如何使用fork更改上游更新?

时间:2015-05-11 15:27:24

标签: git github

我有一个主存储库 A ,我分叉到存储库 B 。我已经对 B 进行了一些更改,我想要升级到 A 。我很难搞清楚如何做到这一点。

首先,执行此操作的git命令是什么?

其次,我可以在github上做拉取请求来促进这个吗?这会怎么样?

最后,我实际上在B中有一个我想合并的分支。在将合并/拉取请求返回到上游存储库(A)之前,是否应该将B中的分支合并回我的主分支?

1 个答案:

答案 0 :(得分:1)

有两种主要方法可以做到这一点

  1. 合并客户端并与多个遥控器进行交互
  2. 将服务器端与Pull请求合并,并仅与1个远程
  3. 进行交互

    在您阅读之前,我只想说您的问题相对开放,而且没有一个最好的答案。以下答案仅反映了我用来为您提供一些见解的一些工作流程。

    客户端

    假设您正在处理B的克隆,您可以添加A作为第二个遥控器:

    git remote add repo_a <repo A URL>
    

    repo_a是您的远程存储库的别名,就像origin可能是远程B的当前别名一样。为了清楚起见,我们将origin重命名为repo_b

    git remote rename origin repo_b
    

    列出你的遥控器:

    git remote -v
    

    从两个遥控器中获取内容

    git fetch repo_a
    git fetch repo_b
    

    此时,您可以创建本地分支以跟踪来自两个远程存储库的分支,而不限制合并方式或合并方式。如何定义工作流程将添加某些约束。

    如果您想将Repo B的feature_1分支的更改合并到repo_a的{​​{1}}分支,您可以这样做:

    master

    您最大的朋友是git checkout -b master_a repo_a/master --track git merge feature_1 git push repo_a master_a:master 或任何其他图形工具,它们将在同一视图中显示本地分支和远程分支。我建议打开一个独立的gitk并根据需要随时刷新它。不要忘记gitk选项。

    --all

    服务器端(请求)

    在下一个示例中,客户端命令发生在gitk --all & 的本地克隆中。我们将在GitHub上将功能推送到repo_b并使用pull请求进行合并。

    当我处理拉取请求时,我希望repo_b的主分支始终与父存储库同步,并且在{{1}中使用repo_bupstream是很常见的客户端克隆:

    origin

    将您的主分支重置为repo_b

    git remote add upstream <repo A URL>
    

    实施您的功能并推送到Github:

    upstream

    现在,在Web界面中,您应该可以选择在查看该分支时提交拉取请求。我不会详细介绍,但它应该足够直观。选择git fetch upstream git fetch origin git checkout master git reset --hard upstream/master git checkout -b feature_2 作为来源,git push origin feature_2 作为目的地。

    合并完成后,您可以更新repo_b/feature_2克隆中的repo_a/master分支:

    master