不确定如果我分叉并克隆了一个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 - 在您的笔记本电脑上,将M克隆到M2,以便M2中的
现在您可以运行git fetchname
来创建和更新M2中形式name/branch-name-from-T
的远程跟踪名称1,在从T获得T具有而M2缺少的任何提交之后。
如果您有权直接推送到T,您现在可以使用git pushname refspec
(请记住name
这是M2中T的名称(——但如果您有权限直接推送到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的文档是一个清晰的模型。。。(模仿网站(。