最後のコミット、HEAD、およびディレクトリで確認できるファイルの状態に違いがあるようです。
HEADとは何ですか?それを使用して何ができますか、どのような間違いを避ける必要がありますか?
HEAD
か、head
今すぐ使用することができます@
の代わりにHEAD
代わりに。なぜそれができるのかについては、この回答(最後のセクション)を参照してください。
最後のコミット、HEAD、およびディレクトリで確認できるファイルの状態に違いがあるようです。
HEADとは何ですか?それを使用して何ができますか、どのような間違いを避ける必要がありますか?
HEAD
か、head
今すぐ使用することができます@
の代わりにHEAD
代わりに。なぜそれができるのかについては、この回答(最後のセクション)を参照してください。
回答:
HEADは、現在チェックアウトされているブランチの最後のコミットへの参照です。
これには小さな例外があります。デタッチされたヘッドです。切り離さHEADは、あなたがチェックアウトするたびに終わるような状況であるコミットの代わりに支店の(またはタグ)。この場合、これは名前のない一時的なブランチであると想像する必要があります。したがって、名前付きブランチ参照を持つ代わりに、HEAD のみを持ちます。それでもコミット(HEADを更新する)を行うことができるため、デタッチされたHEADを名前のない一時的なブランチと見なす場合も、上記の短い定義は当てはまります。
refs/heads
。HEAD
ただし、小文字の頭はとは異なります。私の答えはこれを少し明確にします。
^
は単に「前のコミット」のgitの表記法です。つまり、現在のコミットの前のコミットです。(現在がマージの場合、最初の親を使用します。)
HEAD
現在チェックアウトされているコミットへの参照(参照)です。
通常の状態では、これは実際にはチェックアウトしたブランチへのシンボリック参照です。.git/ HEADの内容を見ると、「ref:refs / heads / master」のようなものが表示されます。ブランチ自体は、ブランチの先端にあるコミットへの参照です。したがって、通常の状態でHEAD
は、現在のブランチの先端でのコミットを効果的に指します。
「デタッチされたヘッド」を持つことも可能です。これは、リモートブランチ、特定のコミット、タグなど、(ローカル)ブランチ以外のものをチェックアウトすると発生します。これを確認する最も一般的な場所は、コミットの編集を選択したときのインタラクティブなリベース中です。デタッチされたHEAD状態では、HEADはコミットへの直接参照です。.git/ HEADの内容はSHA1ハッシュになります。
一般的に言って、HEADは「チェックアウトしたもの」を意味する便利な名前であり、それほど心配する必要はありません。チェックアウトした内容に注意してください。ブランチを使用していない場合(デタッチされたHEAD状態)は、自分が何をしているのか(たとえば、インタラクティブなリベースの場合)を知らない限り、コミットしたくないでしょう。 。
git rebase <branch> HEAD
です。これが最後の共通の祖先を見つける<branch>
とHEAD
、その後、そこからのすべてのコミットを取るHEAD
と上に(それらをリベース)、それらを適用します<branch>
。基本的にはパッチとして適用することでこれを行うため、2つのブランチが実際に異なる場合、競合が発生する可能性があります。しかし、もし<branch>
祖先が先祖である場合HEAD
(つまり、あなたが適切な場所にいて、あなたが切り離したことを忘れていた場合HEAD
)、リベースは早送りマージです。
私はいつも、HEAD~5
以前に5つのコミットに移動することを意味すると思っていました。ただし、コマンドのGO部分は含まれません。コマンドのreference / 'where to'の部分のみが含まれます。
:素人用語で、の問いに答えるために使われています、私は行くべきか?どのコミットに?
HEAD
現在のコミット(への参照)を意味しますHEAD~1
前の1つのコミット(への参照)を意味しますHEAD~
ALSOは、(参照)1コミット前を意味しますHEAD~87
は(参照)87回前のコミットを意味しますGitはHEADと呼ばれる参照変数を維持します。また、この変数をポインターと呼びます。その目的は、リポジトリー内の特定のコミットを参照またはポイントすることだからです。新しいコミットを作成すると、ポインタは変化するか、新しいコミットを指すように移動します。HEADは常にリポジトリ内の現在のブランチの先端を指します。これは、ステージングインデックスや作業ディレクトリではなく、リポジトリに関係しています。
それを考える別の方法は、リポジトリの最後の状態または最後にチェックアウトされたものです。これは、リポジトリが終了した場所または最後の状態であるため、HEADが次のコミットの親を指しているか、またはコミット書き込みが行われる場所。
これを考えるのに良い比喩は、カセットテープレコーダーの再生ヘッドと録音ヘッドです。オーディオの録音を開始すると、テープがヘッドを通過し、ヘッドに録音されます。[停止]を押すと、その記録ヘッドが停止した場所が、もう一度[記録]を押すと記録を再開する場所になります。これで、移動できるようになりましたが、ヘッドを別の場所に移動できますもう一度Recordを押すと、録音が開始されます。
GitのHEADポインターは非常によく似ており、次に録音を開始する場所を指します。これは、コミットしたことについてリポジトリで中断した場所です。