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
答案 0 :(得分:4)
在我的情况下,问题是我有一个与项目根目录中的分支同名的文件夹。 Git似乎认为xyz
中的git checkout xyz
是文件夹,而不是分支。
我必须执行以下操作才能首次将工作树切换为分支xyz
:
git checkout -t origin/xyz
显然,这会为.git/config
(以及其他配置文件)添加几行。之后,我可以通过致电xyz
/ master
来切换git checkout xyz
和git 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