我们需要遵循的工作流程如下:
这很好,但是几天后我们需要创建一个新的特性分支。同时,一些功能已经被推荐给主要的回购大师。
如果我们现在在回购上创建一个新的分支,把它推到我们的分叉副本上,我们将使用旧的过期代码。
那么,我们如何把最新的主人从原来的回购我们没有许可,进入我们的分叉回购,然后下降到我们的地方回购?
还是最好总是为每个特性分支创建一个新的分支,并尝试快速工作(因为代码很快就过时了,因为我们无法在别人的推动下进行更改)。
这是关于这个问题的一些讨论:
但是缺少了我需要的东西,那就是如何使用实际的git命令来完成这个任务。
例如,我们现在拥有的是:
我们不知道的是,我们需要哪些命令才能从原始的github回购系统中获得最新的主更新,通过我们在私人github帐户上的分叉式回购副本,最后再到我们本地克隆的分叉回购系统。
例如,我们如何告诉github囤积的分叉回购从它分叉的回购中更新自己?
或者,如果这是不可能的,一种从原来的github托管回购的最新主机直接到开发人员PC上的本地克隆副本的方法(绕过devs中的分叉回购)。私人github帐户)
我也看到了这个帖子:
公认的答案是:
git remote add upstream https://github.com/whoever/whatever.git
git fetch upstream
git checkout master
git rebase upstream/master发布于 2018-01-18 21:36:15
正如另一个答案所描述的,拥有两个遥控器是没有错的。实际上,要提交特性分支,您不必执行任何重新同步或分叉。你需要遵循所谓的三角工作流(在那里搜索“改进对三角工作流的支持”).
tl:dr:
<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中上游的最佳实践的问题超出了这一点,它需要“跟踪分叉特有的更改”。当这样的目标出现时,就有一项任务是保持这些变化是最新的,而不是以前的。
发布于 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中。
https://stackoverflow.com/questions/48328058
复制相似问题