GIT でデタッチされた HEAD を再アタッチする方法 質問する

GIT でデタッチされた HEAD を再アタッチする方法 質問する

(これについては多くの質問があることはわかりますが、私の問題を正確に解決するものは見つかりませんでした)。

私は gitlab-ci を実行しており、ランナーがコードをチェックアウトするときには、デタッチされたヘッドとしてチェックアウトします。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.

ヘッドを再接続する簡単な方法はありますか? 私が見たほとんどのソリューションは、変更がデタッチされたヘッドにコミットされたという事実を扱っていますが、これは私の場合は当てはまりません。私は、developすべての Git 履歴を含む完全なブランチを Docker コンテナーに取得したいだけです。

または、gitlab ci がデタッチされたヘッドをチェックアウトするのを停止する方法があれば、それも素晴らしいでしょう。

ベストアンサー1

切り離されたヘッドコミットの生のハッシュ ID を含む HEAD です。コメントで述べたように、継続的インテグレーションであるかどうかに関係なく、ビルド システムにこれを使用するのは通常かなり合理的です。ハッシュ ID で特定のコミットをチェックアウトしたり、タグ名をチェックアウトしたりできますが、どちらの方法でもHEADコミット ハッシュ ID が含まれることになり、安定していることが保証されます。

しかし、もし「接続された」(切り離されていない)HEADが欲しいなら、ギット条件は を実行することですgit checkout <branch-name>。これにより、ブランチの名前が に書き込まれHEAD、 がHEADそのブランチに添付されます。つまり、HEADどのコミットが最新かを決定するのは ではなく、ブランチ名です。ブランチ名を更新すると、現在のコミットが変更されます。

このプロパティはのみブランチ名、つまり名前空間に存在する名前に適用されますrefs/heads/。名前はorigin/branch通常refs/remotes/origin/branch、ブランチ名ではないの省略形です。リモートトラッキング名(時にはリモート追跡ブランチ、これは悪い言葉の組み合わせです。git checkout「ブランチ」のように、そうでしょう?)それに名前を付けるできるコミットに解決されるが、ではありませんブランチ名を指定すると、分離された HEAD が生成されます (チェックアウトが機能する場合)。

HEAD を添付したい場合は、ブランチ名、つまり名前が で始まる参照に添付する必要がありますrefs/heads/

おすすめ記事