为什么git checkout <remote_branchname>没有创建新的跟踪分支?</remote_branchname>

时间:2013-09-16 17:09:40

标签: git version-control

TLDR :如果X作为远程分支存在,那么git checkout X应该创建它的本地分支。就我而言,对于单个分支,它没有。

远程存储库有master, release,和其他一些分支(比如refactor-update) 我这样做:

git clone WHATEVER/repo.git
git checkout release

但是我没有得到正常的分支切换消息,也没有创建本地分支跟踪origin/release(根据man的{​​{1}}页面)。我仍在git checkout请注意,如果我master.,一切都按预期工作。

这在其他计算机上是可重现的(虽然是相同的平台,可能是相同版本的git)。我(出于绝望,不是因为我认为它会起作用),删除git checkout refactor-update分支并分别用备份和release替换它,行为没有变化(master)< / p>

我因可能导致问题的原因而陷入困境。我怀疑git push origin :release && git push origin master:release似乎由于某种原因似乎没有识别出git checkout这个词,这就像执行release一样。为了尝试跟进这个,在另一个回购中我创建了一个发布分支,看看它是一个保留字还是什么,但它肯定只是在这个存储库中。在git checkout中似乎没有任何异常。

Git版本:1.8

4 个答案:

答案 0 :(得分:4)

在我的情况下,问题是我有一个与项目根目录中的分支同名的文件夹。 Git似乎认为xyz中的git checkout xyz是文件夹,而不是分支。

我必须执行以下操作才能首次将工作树切换为分支xyz

git checkout -t origin/xyz

显然,这会为.git/config(以及其他配置文件)添加几行。之后,我可以通过致电xyz / master来切换git checkout xyzgit checkout master

当我在根文件夹中并且在克隆了repo之后立即调用git checkout xyz时,git什么都不做,也没有给出任何响应。当我cd到子文件夹以便文件夹xyz不再在范围内,然后拨打git checkout xyz时,git会抱怨:error: pathspec 'xyz' did not match any file(s) known to git

答案 1 :(得分:1)

Clone为你提供了所有原始分支的遥控器,但它只为你的原始HEAD分支(或任何其他分支)提供了一个本地分支。

  

TLDR:如果X作为远程分支存在,那么git checkout X应该创建它的本地分支。就我而言,对于单个分支,它没有。

我会冒昧地不同意这一点。如果您想要checkout创建分支,请告诉它创建一个分支 分支。

git checkout -t origin/release     # create branch `release` tracking `origin/release`.

git checkout -b foobar             # create branch `foobar` based on your HEAD commit

[编辑:]

我想我现在理解这个抱怨。

git checkout name

  • 如果是本地分支或显式远程分支,请切换到它。
  • 如果是跟踪路径,请将其重置
  • 如果是远程分支,请创建跟踪分支并切换到它。

并且因为它优先考虑重置,所以当它可以选择做一些安全的事情时,它可以选择做一些不安全的事情。

答案 2 :(得分:0)

您缺少-b选项

尝试

git checkout -b branch_name

编辑注释 :正如下面的评论中所讨论的那样,只有当您使用的是git版本1.7.9或更低版本时,才会出现这种情况。时间。

答案 3 :(得分:0)

您错过了-t选项。

git checkout -t origin/release

将创建并签出跟踪release的本地分支origin/release

使用较新版本的Git,这就足够了:

git checkout release