web-dev-qa-db-ja.com

デタッチされたHEADを再接続する方法

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

私はgitlab-ciを実行しています。ランナーが私のコードをチェックアウトすると、分離したヘッドとして実行されます。 runnersディレクトリでgit statusコマンドを実行すると、次のようになります。

git status
# HEAD detached at 847fe59
nothing to commit, working directory clean

私が取り組んでいることのために私がする必要があるのは、このヘッドを開発ブランチに再接続し、Dockerコンテナーで使用するために完全なリポジトリでgit pullを使用することです。私は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が切り離されたヘッドをチェックアウトしないようにする方法があればそれも素晴らしいでしょう。

8
Remotec

detached HEADは、コミットの生のハッシュIDを含むHEADです。コメントに記載されているように、ビルドシステムでこれを使用することは、ある種の継続的な統合であるかどうかにかかわらず、一般的にかなり合理的です。特定のコミットをハッシュIDでチェックアウトするか、タグ名をチェックアウトしますが、HEADコミットハッシュIDを含むようになり、安定していることが保証されます。

ただし、「アタッチされた」(デタッチされていない)HEADが必要な場合は、Gitで行う必要があるのは_git checkout <branch-name>_を実行することだけです。これにより、ブランチの名前がHEADに書き込まれ、HEADがそのブランチにアタッチされます。つまり、現在のコミットを決定するのはHEADではなく、ブランチ名です。ブランチ名を更新すると、現在のコミットが変更されます。

このプロパティonlyはブランチ名、つまり_refs/heads/_名前空間に存在する名前に適用されることに注意してください。 _Origin/branch_という名前は通常、ブランチ名ではない_refs/remotes/Origin/branch_の省略形です。 リモートトラッキング名リモートトラッキングブランチと呼ばれることもありますが、これは確かにサウンド "ブランチ"、そうではありませんか?) _git checkout_にcanコミットに解決される任意の名前を指定すると、is notブランチ名となり、デタッチHEAD(とにかくチェックアウトがまったく機能する場合)。

HEADをアタッチする場合は、ブランチ名、つまり名前が_refs/heads/_で始まる参照にアタッチする必要があります。

5
torek

これは私のために働いた

コマンド:

git checkout FETCH_HEAD

出力:

Previous HEAD position was 3cf5de5... Initial commit
HEAD is now at 600ea51... Sample Git Demo
0
Parag Jadhav