如果我有一个远程分支机构,则可以在本地进行git checkout MyRemoteBranch
,它将正常工作。通过正常工作,我的意思是它将创建一个名为MyRemoteBranch的本地分支并切换到该分支,该本地分支将跟踪远程服务器。
在这种情况下,我什么时候必须传递-b
参数?遥控器确实存在时,以下内容之间有什么区别?
git checkout MyRemoteBranch
Vs
git checkout -b MyRemoteBranch
答案 0 :(得分:1)
在这种情况下,我什么时候必须传递-b参数?遥控器确实存在时,以下内容之间有什么区别
区别在于,如果传递-b
标志,git
会创建一个 new 分支,并使用您指定的名称并基于您创建时所在的分支该分支。如果没有该标志,git
将查找一个现有分支,包括您要跟踪的任何远程存储库中的一个分支,如果找到分支,则切换到其中一个。
所以,让我们说:1)您当前在自己的分支机构foo
中; 2)您有一个名为upstream
的遥控器; 3)该遥控器具有一个名为bar
的分支。如果您说:
git checkout bar
然后,您将切换到foo
上upstream
分支的本地副本(假设您的仓库已经知道foo
,因为您最近做过git fetch
)。换句话说,如果您这样做:
git diff upstream/bar
然后git
将不会报告差异。
但是,如果您赋予-b
标志:
git checkout -b bar
然后git
将创建一个 new 分支,该分支恰好也被命名为bar
,但其内容与您所使用的foo
分支相同就在里面。换句话说:
git diff upstream/bar
将报告upstream
的{{1}}分支和您的本地bar
分支(再次从您的bar
分支获取其内容)之间的差异。
自己尝试很容易。只需选择两个本地不存在的远程分支,例如说您的远程站点上的foo
和upstream/branch1
会有所不同。验证与upstream/branch2
之间存在差异。现在签出不带git diff upstream/branch1 upstream/branch2
标志的第一个分支:
-b
现在,您应该有一个名为 git checkout branch1
的本地分支。再次检查与上游版本是否匹配:branch1
。不应有任何差异。接下来,尝试使用git diff upstream/branch1 branch1
标志创建一个branch2
:
-b
现在您应该有一个本地 git checkout -b branch2
,但它应该与branch2
和branch1
中的内容匹配。验证:
upstream/branch1
答案 1 :(得分:1)
Caleb's answer是正确的(我对此表示赞同),但此处用更精确的符号表示:
git checkout -b name
尝试使用当前(HEAD)提交作为新分支的哈希ID创建新的分支名称 name
。如果分支名称已经存在,则失败。
git checkout name
尝试使用名称 {name
检出现有分支。
如果由于 name
不存在而失败,则继续进行第二步,Git文档有时将其称为“ DWIM”模式: Do What我的意思是。
“ DWIM”步骤检查您的所有远程跟踪名称:origin/name
,upstream/name
(如果您有名为 upstream
的远程标识符,依此类推)上。如果完全匹配,它将执行以下操作:
git checkout -b name remote-tracking-name
如您所见,它的参数比原来的-b
选项多一个。
git checkout -b name commit-specifier
(您可以根据需要手动调用,但可以通过DWIM模式为您调用)尝试创建新的分支名称 name
,使用给定的 commit-specifier
作为新分支的哈希ID。如果名称存在或(如果您现在无法git checkout
该特定的提交哈希ID),则此操作失败。 (有关何时可以切换到另一个提交或何时不能切换到另一个提交的更多信息,请参见Checkout another branch when there are uncommitted changes on the current branch。)
为完整起见,我们还应该提及git checkout --track remote-tracking name
,例如git checkout --track upstream/develop
。这将查找远程跟踪名称,然后使用它使用相同的名称创建一个新的(本地)分支:在这种情况下,它将创建一个新的分支develop
,就像您要运行{{1} }。如果您现在暂时没有 git checkout -b develop upstream/develop
,但是 do 同时具有 develop
和 origin/develop
。 DWIM模式不起作用,因为upstream/develop
不知道使用git checkout develop
还是origin/develop
。
答案 2 :(得分:0)
git checkout MyRemoteBranch
是远程存储库中此分支的时间
git checkout -b MyRemoteBranch
使用-b可以在本地创建新分支,无论是否不在远程分支中
答案 3 :(得分:0)
这两个命令之间有很多区别。 当您使用
git checkout myRemoteBrench
仅在分支已经存在时切换分支。
但是当您使用
git checkout -b myRemoteBranch
首先检查所提到的分支是否存在,如果不存在,则使用给定名称创建一个新分支并切换到该分支。