git 克隆 - 默认分支

git clone - default branch

从我的 git 实验室服务器克隆一个 git 存储库后,它没有检出 master,因为 origin/HEAD 指向其他分支 'origin/foo'。在gitlab中,默认分支设置为master。

如何将 origin/HEAD 从 'origin/foo' 移动到指向 'origin/master',以便更多的克隆自动检出 origin/master?

克隆后,git 远程显示原始状态:

HEAD branch: foo

git remote -r seconds that:

origin/HEAD -> origin/foo

我希望 HEAD 分支指向 master,但是 - 在 gitlab 中 - 默认分支已经设置为 master。

这道题,我觉得你需要远程操作。做类似的事情:

git checkout master.

让 HEAD 引用 master。

这只能在服务器端完成。对于 GitLab,它在您的项目中完成,设置(左侧边栏中的最后一项),"Default Branch"(第三个文本字段)。

目前(2016 年 3 月)显然存在一个问题,这意味着 GitLab 报告的默认分支并不总是与 git remote show origin 报告的 HEAD 分支相同。将 GitLab 默认分支设置为其他任何分支,然后将其设置回 master,对@rralf 有效。

除了 ,值得补充的是,如果您的客户端 git 非常旧(也就是说,早于 1.8.5,尽管修复程序被反向移植到 1.8.4.3好吧),它可能不会选择正确的分支。

当服务器的 HEAD 引用解析为提交 ID,该提交 ID 也是 多个 分支的尖端时,就会出现问题。在这些旧版本的 git 上,clone 进程无法理解 HEAD -> ... 方向,而只是获取 HEAD 解析到的原始提交 ID。它还获取每个分支的提交 ID,然后选择一些具有该提交 ID 的分支(本质上是随机的)。

较新的客户协商符号样式转移,并且每次都获得正确的分支。但是,如果您坚持使用旧的,一种解决方法是确保 HEAD 解析到的 ID 仅与一个分支相关联。也就是说,对于匹配的每个其他分支,进行虚拟提交,以便该分支的尖端不再是相同的 ID。

(如果服务器太旧,这也会失败,因为那些旧服务器在协商阶段不接受符号传输选项,但当然 GitLab 并没有像某些 Linux 我们不会 CentOname 的发行版,咳咳。)