我的理解是克隆存储库的默认分支是HEAD指向克隆的repo中的任何内容。
我现在遇到的情况并非如此。我的理解显然有缺陷,那么在克隆(裸)repo时,什么决定了默认的checkout分支呢?
该回购的最后一次提交是在裸仓库的HEAD中引用的分支与我在克隆中作为结账分支获得的分支之间的合并。
运行git remote show origin
会返回:
Fetch URL: ...
Push URL: ...
HEAD branch (remote HEAD is ambiguous, may be one of the following):
<bad-branch>
live
Remote branches:
...
Bare repo使用Git版本1.8.2.1,客户端使用1.7.12.4,传输使用SSH。
也许答案实际上是this one here。 This answer证实了这一点。如果可以选择符号引用全部指向与HEAD相同的修订,则客户端将猜测使用哪个分支。
答案 0 :(得分:12)
这实际上是HEAD指出的。使用git symbolic-ref HEAD refs/heads/mybranch
设置HEAD。
(来源:http://feeding.cloud.geek.nz/posts/setting-default-git-branch-in-bare/)
答案 1 :(得分:7)
裸仓库也有HEAD
。这就是你克隆它时得到的结果。
将存储库克隆到新创建的目录中,为克隆存储库中的每个分支创建远程跟踪分支(使用
git branch -r
可见),并创建并检出从克隆存储库当前分叉的初始分支活跃的分支。
关于“当前活动分支”的位是指远程的HEAD
修订版。
如果您想要不同的行为,可以使用--branch
或-b
:
<强>
--branch <name>
强>
的-b <name>
强>
而不是将新创建的HEAD
指向克隆的存储库HEAD
所指向的分支,而是指向<name>
分支。在非裸存储库中,这是将要检出的分支。--branch
还可以在生成的存储库中对该提交中的HEAD
进行标记和分离。
答案 2 :(得分:2)
如果想手动检查 origin 远程的默认分支,这应该可以可靠地工作:
git switch $(cat $(git rev-parse --git-dir)/refs/remotes/origin/HEAD | cut -d'/' -f4)
答案 3 :(得分:0)
它是origin/HEAD
。但是,如果要使用“ origin / master”之类的名称,则必须像这样解析文件
cat .git/refs/remotes/origin/HEAD | awk '{ print $2 }'