プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

Git DetachedHEAD

HEADが外れるという問題は発生しないかもしれませんが、回避できるように、HEADについて知っておくことが重要です。推奨事項として、切り離されたHEADでコミットしないでください。コミットする場合は、コミットを保存する方法を説明します。

リマインダー

HEADが何であるかを理解するために、Gitの基礎となるツリーのような構造について復習してみましょう。

  1. 作業ディレクトリ:または作業ツリー。ローカルディレクトリとgit statusを参照します 作業ディレクトリの状態が表示されます。
  2. HEAD:これは現在のブランチの最後のコミットスナップショットです。 git checkoutでブランチを切り替える場合 その後、HEADはブランチの最後のコミットに変更されます。
  3. インデックス:またはステージング領域なので、git add コミットするファイルは、このインデックスに追加されます。

付属のヘッドを理解する

これで、HEADが現在のブランチでの最新のコミットであることがわかりました。 git statusを実行する それはあなたのブランチに教えてくれます。 On branch master git logを実行します コミット履歴に次のような情報が表示されます:

commit 38373004b8f651b58cea64cd629e1e2c18c164a0 (HEAD -> master, origin/master, origin/HEAD)
Author: Felipe <email>
Date:   Wed Sep 29 22:57:59 2020 -0500

次に、ブランチを変更して、たとえばgit checkout developmentを使用する開発ブランチに変更する場合 その後、HEADは最後のコミットに移動します。したがって、これらすべての通常のケースでは、ヘッドは、私たちがいるブランチの最後のコミットにアタッチされているはずなので、私たちをフォローしています。

頭を切り離す

HEADを切り離す方法はいくつかあります。

  • git checkout --detachの使用 コマンド。
  • コミットハッシュにチェックアウトします。例えば。上記のコミットを使用する場合git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
  • 任意のブランチに^0を追加する。例えば。 git checkout master^0

意図的にHEADを切り離したいかどうかわかりません。したがって、最も一般的なケースは、誤ってブランチにチェックアウトしたいと考え、ブランチ名の代わりにコミットハッシュを使用した場合です。

では、HEADを切り離した後はどうなりますか?次のような警告が表示される場合があります:

$ git checkout 38373004b8f651b58cea64cd629e1e2c18c164a0
Note: checking out '38373004b8f651b58cea64cd629e1e2c18c164a0'.

You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by performing another checkout.

デタッチされたHEAD環境で、git statusを実行すると、 変更を加えたとしても、次のように表示されます:

参加者の81%は、ブートキャンプに参加した後、自分たちの技術的な仕事の見通しについてより自信を持っていると述べました。今日のブートキャンプにマッチしましょう。

平均的なブートキャンプの卒業生は、ブートキャンプの開始から最初の仕事を見つけるまで、キャリアの移行に6か月も費やしませんでした。

HEAD detached at ac63806
nothing to commit, working tree clean

ですから、あなたは時間内に凍りついていて、あなたがすることはすべて失われたり、単にどこにも行かなくなったりするようになります。なんで? HEADが何も指していないからです。

一部の人々は、これが物事を壊す心配なしにリポジトリの以前の状態を調査するのに役立つと感じています。

ヘッドの再取り付け

切り離された状態になっても、ブランチは影響を受けないことを理解する必要があります 。ここで、HEADを再接続する最良の方法は、新しいブランチを作成することです。

git checkout -b <branch-name>と同じくらい簡単に行うことができます 。

HEADがいないことに気づかず、変更を加え始めた場合はどうなりますか?ここでは、一時的なブランチを作成し、コミットする必要のあるブランチとマージする必要があります。例:

git checkout -b temp-branch
git checkout master
git merge temp-branch

これにより、一時的なブランチから必要なブランチに変更がコミットされます。この場合はマスターです。

結論

今日、私たちは(文字通りではなく)HEADを切り離す方法とその後に何をすべきかを学びました。 HEADがGitの内部動作で何であるかを理解すると、HEADが切り離されているなどの特殊なケースを理解するのに役立ちます。

また、HEADが切り離された状態になっても心配しないことも学びました。 HEADが緩んでいるため、変更やコミットはどこにも反映されないことに注意してください。したがって、それに応じてHEADを再接続したことを確認してください。


  1. レスキューへのGitリセット

    自分で、またはチームの一員としてプロジェクトに取り組んでいる場合、コミットを元に戻したい場合があります。 git reset コマンドは、実際の命の恩人として知られているツールの1つです。 Gitの追跡メカニズム git resetに進む前に 、gitの基本構造について理解する必要があります。 Gitは、ノードとポインターを備えたツリーのような構造を介して、ファイルを管理および追跡します。 ローカルのgitリポジトリには基本的にこれらの「ツリー」が3つあります: 作業ディレクトリ :または作業ツリー。ローカルディレクトリと git statusを参照します。 作業ディレクトリの

  2. HTML<head>タグ

    HTMLのタグは、次の要素のコンテナとして機能します-、、、、、、。 HTML5では、要素を含めずにHTMLドキュメントを操作することもできます。 内部 タグを実装し、 −を追加する例を見てみましょう。 例 <!DOCTYPE html> <html> <head> <title>Document Title</title> </head> <body>    <h2>Demo Heading</h2>    <p>This i