首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >吉特:怎么换叉子?

问吉特:怎么换叉子?
EN

Stack Overflow用户
提问于 2018-01-18 18:31:17
回答 2查看 304关注 0票数 0

我们需要遵循的工作流程如下:

  1. 将github上的项目转移到您自己的githib帐户中。
  2. 克隆分叉项目到本地机器。
  3. 在本地机器上创建特征分支(主)。
  4. 将分支机构提交分叉回购。
  5. 对分叉回购上的新分支执行主回购请求。

这很好,但是几天后我们需要创建一个新的特性分支。同时,一些功能已经被推荐给主要的回购大师。

如果我们现在在回购上创建一个新的分支,把它推到我们的分叉副本上,我们将使用旧的过期代码。

那么,我们如何把最新的主人从原来的回购我们没有许可,进入我们的分叉回购,然后下降到我们的地方回购?

还是最好总是为每个特性分支创建一个新的分支,并尝试快速工作(因为代码很快就过时了,因为我们无法在别人的推动下进行更改)。

这是关于这个问题的一些讨论:

在github上跟踪fork中上游的最佳实践

但是缺少了我需要的东西,那就是如何使用实际的git命令来完成这个任务。

例如,我们现在拥有的是:

  1. 使用github web ui对github进行本地回购
  2. git克隆https://github.com/myname/aproject
  3. git添加原点https://github.com/myname/aproject #不确定我们为什么要这样做。
  4. git结帐-b分支
  5. 做些工作。
  6. 提交-m ..。
  7. git推原点我的分支把新的分支放在我们个人的github分叉副本上
  8. 通过github ui发出拉请求。

我们不知道的是,我们需要哪些命令才能从原始的github回购系统中获得最新的主更新,通过我们在私人github帐户上的分叉式回购副本,最后再到我们本地克隆的分叉回购系统。

例如,我们如何告诉github囤积的分叉回购从它分叉的回购中更新自己?

或者,如果这是不可能的,一种从原来的github托管回购的最新主机直接到开发人员PC上的本地克隆副本的方法(绕过devs中的分叉回购)。私人github帐户)

我也看到了这个帖子:

如何更新GitHub分叉存储库?

公认的答案是:

代码语言:javascript
复制
git remote add upstream https://github.com/whoever/whatever.git
git fetch upstream
git checkout master
git rebase upstream/master
  1. 分叉是如何得到新的主程序更新的?这只会更新本地回购的主人吗?
  2. 这意味着你的本地克隆回购有两个父母-原始回购和你的分叉回购。这怎么能起作用?你如何从两种不同的回购中获取信息?想必,分叉回购将永远不会知道更新从原来的回购?当您下一次将第二个特性分支推回您的分叉回购时,它将基于错误的代码,因此分叉回购将与您的本地回购不同,并且如果您重新检查了从分叉回购到新的dir的所有内容,那么在本地工作的测试将无法工作?
EN

回答 2

Stack Overflow用户

发布于 2018-01-18 21:36:15

正如另一个答案所描述的,拥有两个遥控器是没有错的。实际上,要提交特性分支,您不必执行任何重新同步或分叉。你需要遵循所谓的三角工作流(在那里搜索“改进对三角工作流的支持”).

tl:dr:

代码语言:javascript
复制
<fork in Web>
git clone <URL>
cd clone
git add upstream <upstream URL>
<later>
git fetch upstream
git checkout -b <feature> upstream/master
<develop, commit>
git push origin <feature>
<make PR in Web>

如您所见,您只更新您的叉子的<feature>分支,这是最新的与上游-只是一个您需要提交一个公关。基本上,叉子存在的全部目的是拥有一个分支,那么就没有理由维护叉子中的其他分支了。

在github上跟踪fork中上游的最佳实践的问题超出了这一点,它需要“跟踪分叉特有的更改”。当这样的目标出现时,就有一项任务是保持这些变化是最新的,而不是以前的。

票数 2
EN

Stack Overflow用户

发布于 2018-01-18 19:42:40

git remote add upstream …命令序列是获得原始回购master分支的本地副本的正确方法。

这意味着你的本地克隆回购有两个父母-原始回购和你的分叉回购。这怎么能起作用?你如何从两种不同的回购中获取信息?

吉特称他们为“遥控器”,而不是“父母”。是的,在这个操作之后,您的存储库将有两个遥控器(指向远程存储库的链接)。

当您从您的叉子中git clone您的本地回购时,您的本地回购将自动获得一个名为origin的远程master,并根据远程分支origin/master自动创建一个本地分支master。不应该需要手动git remote add origin,因为默认情况下origin远程是创建的,但不会造成伤害。然后,git remote add upstream …命令添加第二个名为upstream的远程设备。

当您有多个遥控器时,没有任何歧义,因为GitHub名称空间--所有来自每个远程的分支--在开始时都带有name/。您的分叉master远程上的origin分支称为origin/master,而原始upstream远程上的master分支称为upstream/master。如果引用没有命名空间的分支(如master ),则这指的是本地回购中的分支。

您可以使用git branch --list -a看到存储在Git中的所有分支的列表。这包括本地分支(如master )作为远程分支(如origin/master和upstream/master )的本地备份。在运行git fetch --all (或git fetch --all --prune,删除在该远程上删除的分支的本地备份)时,将更新repo对远程分支的本地备份。

想必,分叉回购将永远不会知道更新从原来的回购?

如果要基于另一个遥控器更新一个遥控器,则始终必须通过本地回购中的分支进行更新。你不能在遥控器之间直接推拉。

首先,要确保您有来自所有遥控器的最新提交,请运行git fetch --all,如前所述。

现在原始回购的master可以在upstream/master上访问,您可以将它合并到本地master分支中。用git checkout master做这件事,然后是git merge upstream/master或git rebase upstream/master。之后,您可以通过git push origin master将本地master分支的提交推到origin/master中。

如果您想在分叉的origin回购上创建一个与upstream的master分支相匹配的新分支,您可以git branch upstream-master upstream/master创建本地upstream-master分支,然后git push origin upstream-master将一个新的分支upstream-master推送到origin remote。您还可以在推送过程中通过使用:重命名分支,比如在git push origin upstream-master:old-master中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48328058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档