【发布时间】:2019-10-21 04:49:13
【问题描述】:
我刚刚做了
git fetch origin <remoteBranch>
然后我就这样做了
git checkout <remoteBranch>
这创建了一个名为 <remoteBranch> 的本地分支。
它是如何工作的?通常当我想创建一个本地分支时,我必须这样做
git checkout -b
【问题讨论】:
标签: git git-checkout git-fetch
我刚刚做了
git fetch origin <remoteBranch>
然后我就这样做了
git checkout <remoteBranch>
这创建了一个名为 <remoteBranch> 的本地分支。
它是如何工作的?通常当我想创建一个本地分支时,我必须这样做
git checkout -b
【问题讨论】:
标签: git git-checkout git-fetch
git checkout <branch>[...]如果没有找到
<branch>,但在一个远程(称为<remote>)中确实存在一个具有匹配名称的跟踪分支,则视为等同于$ git checkout -b <branch> --track <remote>/<branch>如果分支存在于多个遥控器中并且其中一个由 checkout.defaultRemote 配置变量命名,我们将使用该分支来消除歧义,即使
<branch>在所有遥控器中不是唯一的。将其设置为例如checkout.defaultRemote=origin 如果<branch>不明确但存在于源远程,则始终从那里签出远程分支。另请参阅 git-config[1] 中的 checkout.defaultRemote。
【讨论】:
git branch -r 向您展示了什么。
origin/HEAD -> origin/develop。为什么这个不一样?这是否意味着我正在跟踪所有这些分支,就像我在 git fetch --all 时一样,然后它将获取/更新每个分支?
origin/HEAD 不是一个普通的 ref(即不直接指向提交)而是一个符号 ref - 就像 HEAD 在你的克隆中一样。它用作git clone 之后的默认分支以进行结帐。到最后一个问题:git fetch 将管理这些分支。 git fetch --all 只是获取所有遥控器,而不仅仅是一个。
git pull 的工作方式相同。显然因为git pull 也包含git fetch,那么同样你可以做git pull 然后git checkout <newBranch> 和git 会自动为你在本地创建和签出分支。
据我所知,当您要求结帐时,如果该分支在本地不存在,git 将尝试找到一个(并且唯一一个)具有该名称的远程分支。如果它存在并且只有一个(可能在你的仓库上设置了多个具有相同分支名称的远程),那么 git 会猜测这是你想要的分支,因此它使用远程分支作为上游分支在本地创建它。
【讨论】:
git checkout asdf => git checkout -b asdf origin/asdf --track,默认情况下,只要只有一个匹配的origin/asdf并且没有当前的asdf。