如果我分叉了一个回购,然后克隆了我的分叉,那么上游(-u)的默认值是多少



不确定如果我分叉并克隆了一个repo,-u的默认值是多少。它会与我从中派生的repo或我从中克隆的repo有关吗?

非常感谢您抽出时间。

Git不知道也不关心GitHub fork。Git的-u标志就是Git命令的标志,所以GitHub分叉的存在与否在这里并不相关。

Git所理解的是";"远程":URL的短名称。由于GitHub的fork操作创建了一个新的、独立的、带有新的、单独URL的存储库,因此您可以添加;GitHub侧上游">作为第二个遥控器。即:

  • 在GitHub上,您将存储库T("他们的"(分叉到存储库M
  • 在您的笔记本电脑上,将M克隆到M2,以便M2中的origin指代M
  • 在您的笔记本电脑上,在M2中,运行git remote addnameurl,其中name是您想为T使用的任何名称,url则是T的URL

现在您可以运行git fetchname来创建和更新M2中形式name/branch-name-from-T的远程跟踪名称1,在从T获得T具有而M2缺少的任何提交之后。

如果您有权直接推送到T,您现在可以使用git pushname refspec(请记住name这是M2T的名称(——但如果您有权限直接推送到T,我们可能会想知道您当初为什么要创建M。因此,我们可以假设没有此权限,在这种情况下,您将使用git push originrefspec提交到M。通常,您在此处使用的refspec将只是M2中您自己的分支名称之一。例如,在创建名为feature/rex-racer的分支后,您可能会创建git push origin feature/rex-racer

在此时将分支feature/rex-racer的上游设置为您自己新创建的远程跟踪名称origin/feature/rex-racer——换句话说,现在origin/feature/rex-racer已经存在——您将随后运行:

git branch --set-upstream-to=origin/feature/rex-racer feature/rex-racer

(如果这是您的当前分支,则可以从该命令中删除最终feature/rex-racer(。

git push-u自变量只是一种避免必须键入后续git branch --set-upstream-to命令的方法。这意味着:嘿,Git,在这个git push命令成功后——如果成功了——运行明显对应的git branch --set-upstream-to命令。";明显的";命令是取您刚刚创建或更新的任何远程跟踪名称,并将其粘贴到--set-upstream-to=<thing><thing>部分。


1现代Git文档将这些东西称为远程跟踪分支名称。但是一旦你有了一个,例如这里的例子中的origin/feature/rex-racer——如果你尝试git switch origin/feature/rex-racer,Git告诉你这不是一个分支名称。实际上,它不是分支名称。分支名称何时不是分支名称?当它是远程跟踪分支名称时。为什么不完全去掉分支这个词,并将其称为远程跟踪名称呢?嗯,从来没有人说过Git的文档是一个清晰的模型。。。(模仿网站(。

最新更新