当您克隆一些现有的存储库时,您会得到他们的所有提交 1 并且没有他们的分支名称。但他们仍然有 分支名称。你的 Git 对这些所做的就是将它们变成你自己的远程跟踪名称。2
像origin/master 或origin/main 这样的远程跟踪名称 是您的Git 记住他们的 Git 的分支 名称之一的方式。 3 因此,如果他们有一个名为main 的分支,您将获得一个远程跟踪名称origin/main。如果他们有一个名为master 的分支,你会得到一个远程跟踪origin/master。
一旦git clone 完成将他们的提交复制到您的存储库,并将他们的分支名称重命名为您的远程跟踪名称,您的 Git 然后在 您的 中创建一个 branch 名称> 存储库。你选择你的 Git 应该创建的分支名称,使用 -b 选项到 git clone:
git clone -b develop https://example.com/path/to/repo.git
例如。
如果您不提供-b 选项,您的Git 会询问他们的Git他们推荐哪个名称。根据“他们”是谁,他们可能会推荐master 或main。
这里有一点有点奇怪,那就是您的 Git 要求您选择的这个名称与 他们的 名称之一匹配。由于你的名字是你的,他们的名字是他们的,两者不需要匹配,4 对此没有真正的要求,但你的 Git 仍然需要它,可能是为了减少困惑。所以如果他们有only main,或only master,这就是你会得到的名字。
(单一)标准名字曾经是master。然后 GitHub 将 他们的 更改为 main,现在出现了混乱。如果您从头开始创建存储库(而不是克隆它),则可以选择所需的任何初始分支名称。5
1从技术上讲,您获得的提交少于他们的所有提交,但通常的情况是您获得所有提交。
2Git 调用这些 远程跟踪分支名称,但它们不是 分支 名称:git switch origin/main 给你一个错误,因为例如,git checkout origin/main 产生 Git 所谓的 分离的 HEAD。同时,branch 这个词在 Git 中被严重过度使用。所以从这句话中去掉branch这个词更有意义。这些名称只是您存储库中记住其他人的分支名称的名称;我们可以称它们为“深红色的名称”,但它们实际上会跟踪一些“远程”Git 的分支名称,因此 remote-tracking 是合理的。
3“您的 Git”是指“您的 Git 软件,在您的存储库中工作”。因此,“他们的 Git”是他们在存储库中运行的软件。
4也就是说,你可以调用你的分支之一dwayne,而他们调用他们的分支之一rapunzel,但你仍然可以在你的dwayne上进行提交匹配他们的rapunzel。只是......这样做令人困惑。当目标是在双方都有相同的提交时,人类似乎更喜欢在双方使用相同的名称。
这个想法可能出错:如果您有两个不同的遥控器,例如 bob 连接到 Bob 的 Git,alice 连接到 Alice 的,bob 和 @987654348 @ 有一个名为 cream 的分支,但一个指向乳制品,另一个指向 the 1960s band,您将无法在 您的 存储库中拥有一个名为 cream 的分支不知何故适用于这两者。所以 Git 并不需要它,除非在最初的git clone 步骤中。
5这需要一个相当最新的 Git 来使用 git init 命令来完成。对于较旧版本的 Git,您可以执行 git init 并以名称 master 开始,然后重命名分支。