(我可以看到有很多问题,但我没有找到解决我确切问题的问题。)
我正在运行gitlab-ci,当跑步者检查我的代码时,它会作为一个独立的头部。这是我在runners目录中运行git status
命令时得到的结果。
git status
# HEAD detached at 847fe59
nothing to commit, working directory clean
我正在做的工作是将这个头重新附加到我的开发分支,然后在完整仓库中git pull
重新附加到docker容器中。我猜gitlab ci只检查最后一次提交以将克隆保存到完整的回购中,这是可以理解的。
在我的.gitlab-ci.yml
文件中,我尝试了以下内容......
- git checkout origin/$CI_BUILD_REF_NAME
- git pull
在控制台中提供以下输出...
$ git checkout $CI_BUILD_REF_NAME
Switched to a new branch 'develop'
Branch develop set up to track remote branch develop from origin.
$ git pull
You are not currently on a branch. Please specify which
branch you want to merge with. See git-pull(1) for details.
有没有一种简单的方法来重新连接头部?我见过的大多数解决方案都涉及到一个改变已经转移到分离头上的事实,但对我来说情况并非如此。我只想在我的docker容器中使用我的所有git历史记录获取完整的develop
分支。
或者,如果有办法阻止gitlab ci检查分离的头部也会很棒。
答案 0 :(得分:2)
分离的HEAD 只是一个包含提交的原始哈希ID的HEAD。正如评论中所指出的那样,将它用于构建系统通常是非常合理的,无论是否是某种持续集成:您可以通过哈希ID检出特定提交,或者检查标记名称,但两种方式{ {1}}最终包含提交哈希ID,现在保证稳定。
如果您确实希望拥有“附加”(未分离)HEAD,那么您在 Git 条款中所要做的就是运行HEAD
。这会将分支的名称写入git checkout <branch-name>
,现在HEAD
将附加到该分支。这意味着它根本不是HEAD
,而是分支名称,它确定哪个提交是最新的。任何更新分支名称的内容都会更改当前提交。
请注意,此属性仅适用于分支名称,即名称位于HEAD
名称空间中。名称refs/heads/
通常是origin/branch
的简写,不是分支名称;它是一个远程跟踪名称(有时称为远程跟踪分支,这是一组糟糕的单词,因为它确实听起来像<“em> “,不是吗?)。向refs/remotes/origin/branch
提供可以解析为提交的任何名称,但不是分支名称,导致分离的HEAD(如果结帐有效) ,无论如何)。
如果您想要附加HEAD,则必须将其附加到分支名称,即名称以git checkout
开头的引用。
答案 1 :(得分:0)
这对我有用
命令:
git checkout FETCH_HEAD
输出:
Previous HEAD position was 3cf5de5... Initial commit
HEAD is now at 600ea51... Sample Git Demo