Git 克隆分支

Git clone branches

我遇到了 GitHub 的问题: 我们有一个任务,我们应该在 3 个分支上工作,在每个人完成他们的工作之后我们需要合并分支。 我们在 GitHub 上创建了一个回购协议(假设我创建了它)并且我邀请了我的两个同事访问。

当我在终端中创建存储库时,我将空文件推送到 GitHub(我们还没有开始工作)。 现在我们开始创建分支,我做主我在终端里运行那三个命令:

git branch one
git branch two
git branch three

那么当我 运行 git branch 我应该看到四个分支:onetwothreemaster。 我将代码推送到 GitHub,一切正常。

当我和我的朋友想将 repo 克隆到我们的机器时,问题就开始了,例如我的第一个同事 运行s git clone reponame 和当他 运行s git branch 他只看到分支 master.

我的问题:

  1. 为什么会这样,为什么我们看不到带有克隆的分支?
  2. 我们如何克隆包含所有分支的存储库?

So then when I run git branch I should see the four branches one - two - three -master ...

是的。您在本地存储库中创建了三个新的 b运行ches,因此这三个 b运行ches 存在。您的 Git 最初创建了 master,因此它也存在。

I push the code to GitHub and all is fine.

当您 运行 git push 时,您正在将 提交 推送到 GitHub。在您拥有的、他们不需要的、他们需要的任何新提交到达 GitHub 之后,您的 Git 要求 GitHub 的 Git 创建或更新他们 存储库中的一些 b运行ch 名称。

如果你运行:

git push github one

您发送到 GitHub 的提交将是通过您的 b运行ch 名称 one 找到的提交。 (如果他们已经有部分或全部这些提交,您的 Git 将跳过发送它们,从而加快推送速度。)然后您的 Git 要求他们的 Git 创建或更新 他们的b运行频道名one.

如果你运行:

git push github one two three

你会Git发送所有三个b运行ches所需的提交,如有必要,然后礼貌地要求GitHub创建或更新所有三个 b运行ch names.

您没有准确说明您 运行 的 git push 类型,因此我们无法确定您在 GitHub 上创建了哪些名称(如果有的话)。

The problem started when my friends and I want to clone the repo to our machines, example my first colleague runs git clone reponame and when he runs git branch he just sees the master.

一个git clone命令是shorthand连续几个Git命令(首先加上一个非Git命令,if/as需要,创建一个空目录,在其中执行 运行 Git 命令)。这些命令:

  • 从另一个 Git 存储库(在 GitHub 上)复制所有 提交,但是
  • 复制 none 的 b运行ches.

相反,您自己的 Git 将使用他们的 b运行ch 名称——可以是 只是 mastermain,或者可以是所有四个 b运行ch 名称,正如我们已经指出的那样,将这些名称更改为非 b运行ch 名称。您的 Git 生成的名称是:

  • origin/master(或origin/main)为他们master(或main);
  • origin/one 对于他们的 one,如果他们有的话;
  • origin/two 为他们 two,如果他们有的话;

等等。这些是 远程跟踪名称,而不是 b运行ch 名称。它们将被 git branch -rgit branch -a 打印出来,但不会被 git branch.

打印出来

从他们的 b运行ch 名称创建这些 remote-tracking 名称后,您的 Git 现在在你的克隆中创建一个 b运行ch名称。这是 git clone 的最后一步:它采用您说要使用的 b运行ch 名称,以及您的 -b 选项,并使用 origin/ 版本创建该名称找到正确的提交——然后检出该提交,这样您就可以看到该提交中的文件。

如果您不使用 -b 选项,您的 Git 将询问其他 Git 推荐的名称。标准建议是 mastermain(取其中一个)。所以这就是为什么你们都得到了 master.