最後のコミット、HEAD、およびディレクトリに表示されるファイルの状態には違いがあるようです。
HEADとは何ですか、それで何ができますか、どのような間違いを避ける必要がありますか?
HEAD は、現在チェックアウトされているブランチの最後のコミットへの参照です。
これには小さな例外があります。分離された HEAD です。デタッチされた HEADは、ブランチではなくコミット(またはタグ)をチェックアウトするたびに発生する状況です。この場合、これを名前のない一時的なブランチと見なす必要があります。したがって、名前付きブランチ参照の代わりに、HEADのみを使用します。コミット (HEAD を更新する) を行うことは引き続き可能であるため、切り離された HEAD を名前のない一時的なブランチと考えれば、上記の短い定義は依然として当てはまります。
HEAD
現在チェックアウトされているコミットへの ref (参照) です。
通常の状態では、実際にはチェックアウトしたブランチへのシンボリック ref です。.git/HEAD の内容を見ると、「ref: refs/heads/master」のようなものが表示されます。ブランチ自体は、ブランチの先端にあるコミットへの参照です。したがって、通常の状態でHEAD
は、現在のブランチの先端にあるコミットを効果的に参照します。
「切り離されたHEAD」を持つことも可能です。これは、リモート ブランチ、特定のコミット、タグなど、(ローカル) ブランチ以外のものをチェックアウトするときに発生します。これが表示される最も一般的な場所は、コミットを編集することを選択したときの対話型リベース中です。デタッチされた HEAD 状態では、HEAD はコミットへの直接参照です。.git/HEAD の内容は SHA1 ハッシュになります。
一般的に言えば、HEAD は「チェックアウトしたもの」を意味する便利な名前であり、あまり気にする必要はありません。チェックアウトしたものに注意してください。また、何をしているのかわからない限り (たとえば、インタラクティブなリベースにいる場合など)、ブランチにいない場合 (HEAD の切り離された状態) はおそらくコミットしたくないことを覚えておいてください。 .
Git は HEAD と呼ばれる参照変数を維持します。この変数の目的は、リポジトリ内の特定のコミットを参照またはポイントすることであるため、この変数をポインターと呼びます。新しいコミットを作成すると、ポインターが変化するか、新しいコミットを指すように移動します。HEAD は常に、リポジトリ内の現在のブランチの先端を指します。これは、ステージング インデックスや作業ディレクトリではなく、リポジトリに関係しています。
別の考え方としては、リポジトリの最後の状態または最後にチェックアウトされたものです。これはリポジトリが中断した場所または最後の状態であるため、HEAD が次のコミットの親を指している、またはその親を指しているとも言えます。コミット書き込みが行われる場所。
カセット テープ レコーダーの再生ヘッドと録音ヘッドを例に考えてみましょう。オーディオの録音を開始すると、テープがヘッドを通過し、ヘッドに録音されます。停止を押すと、その記録ヘッドが停止した場所が、2 度目に記録を押すと再び記録を開始する場所です。もう一度 Record を押すと、そこから録音が開始されます。
Git の HEAD ポインターは非常に似ており、次に記録を開始する場所を指しています。これは、コミットしたもののためにリポジトリで中断した場所です。