これらの記号は何を意味し、どういう意味ですか?
(公式ドキュメントには説明がありません)
HEAD
そして、ORIG_HEAD
Gitのに似ている$PWD
と$OLDPWD
バッシュに。:)
これらの記号は何を意味し、どういう意味ですか?
(公式ドキュメントには説明がありません)
HEAD
そして、ORIG_HEAD
Gitのに似ている$PWD
と$OLDPWD
バッシュに。:)
回答:
HEAD
現在のコミットへの(直接または間接、つまりシンボリック)参照です。これは、作業ディレクトリでチェックインしたコミットであり(変更を加えていないか、同等のものを除く)、「git commit」が新しいコミットを作成する上でのコミットです。通常HEAD
、他の名前付きブランチへのシンボリック参照です。このブランチは現在チェックアウトされているブランチ、または現在のブランチです。HEAD
コミットを直接指すこともできます。この状態は「切り離されたヘッド」と呼ばれ、名前のない匿名のブランチ上にあると理解できます。
また、Git 1.8.5以降@
では、それだけでのショートカットHEAD
になります
ORIG_HEAD
は以前の状態でHEAD
、危険な動作をする可能性のあるコマンドによって設定され、簡単に元に戻すことができます。Gitにreflogがあるため、あまり有用ではありません:HEAD@{1}
はORIG_HEAD
(のHEAD@{1}
最後の値は常にでありHEAD
、危険な操作ORIG_HEAD
のHEAD
前の最後の値です)とほぼ同じです。
詳細については、git(1)のマンページ、Gitユーザーマニュアル、Gitコミュニティブック、およびGit用語集を参照してください。
"pull"または "merge"は常に現在のブランチの元の先端をに残し
ORIG_HEAD
ます。
git reset --hard ORIG_HEAD
ハードリセットすると、インデックスファイルと作業ツリーがその状態に戻り、ブランチの先端がそのコミットにリセットされます。
git reset --merge ORIG_HEAD
マージの結果を調べた後、他のブランチでの変更が不十分であることがわかる場合があります。「
git reset --hard ORIG_HEAD
」を実行すると、以前の場所に戻ることができますが、ローカルの変更は破棄されますが、これは不要です。「git reset --merge
」はローカルの変更を保持します。
パッチが適用される前に、ORIG_HEADが現在のブランチの先端に設定されます。
これはgit am
、間違ったブランチで' 'を実行したり、メールボックスを変更することでより簡単に修正できるコミットのエラー(たとえば、 "From:"行の+エラー)のような複数のコミットに問題がある場合に役立ちます。さらに、mergeは常に '
.git/ORIG_HEAD
'をHEADの元の状態に設定するため、問題のあるマージは 'git reset ORIG_HEAD
' を使用して削除できます。
注:ここから
HEADは移動ポインタです。現在のブランチを意味する場合もあれば、そうでない場合もあります。
したがって、HEADはすでに「現在のブランチ」の同義語ではありません。
HEADはgitのどこでも「現在の」を意味しますが、必ずしも「現在のブランチ」(つまり、切り離されたHEAD)を意味するわけではありません。
しかし、それはほとんど常に「現在のコミット」を意味します。
これは、「git commit
」の上に構築され、「git diff --cached
」と「git status
」が比較対象のコミットです。
これは、非常に限られたコンテキストでのみ現在のブランチを意味します(ブランチ名を操作したい場合--- commit / rebase / etcを介してブランチの先端をリセットして拡張します)。Reflogは時間を遡る手段であり、タイムマシンは「現在」の概念と興味深い相互作用を持っています。
HEAD@{5.minutes.ago}
「HEAD symrefを逆参照して、今どのブランチにいるかを調べ、そのブランチの先端が5分前にどこにあったかを見つける」ことを意味します。
あるいは、「私が5分前にHEADと呼んでいたコミットとは何でしょうか。たとえば、当時「git show HEAD」を実行した場合」などです。
git1.8.4(2013年7月) 紹介する 新しい表記を導入しました!
(実際には、1.8.5または1.9、2013年第4四半期の予定です:コミット9ba89f4で再導入)
代わりに4大文字「を入力するの
HEAD
」、あなたが言うことができる「@
」今、
例えば「git log @
」。
commit cdfd948を参照してください
HEAD
特に「@
」を使用できる場合は、「」を入力するのは面倒です。'
@
' を選択する理由は、ref@op
構文HEAD@{u}
や例(たとえば)から自然に続くためです。ただし、refも操作もありません。それらがない場合は、 'HEAD
'であると見なされます。これで
git show @~1
、「」を使用できるようになりました。これまでは「
@
」は有効な名前でしたが、この考え方と矛盾するため、無効にしてみましょう。この名前を使用した人はいたとしてもごくわずかだろう。
1.8.4-RC3期間中のブログの記事(14日、2013年8月)は、この機能が戻ったと遅れたこと(ありがとう発表しましたカップケーキを用ヘッドアップ)。
繰り返しになりますが、コミット9ba89f4(2013年9月)で再び導入されました 。
commit 2c2b664を参照してください。
@
のショートカットをHEAD
」これはコミット"cdfd948"を元に戻します。これは "
@
"(および@{u}
それに適用される修飾子を含むフォーム)に適用されるだけでなく、たとえば "refs/heads/@/foo
"にも影響を与えるためです。省略表現を与えるという基本的な考え方は良いかもしれませんし、トピックは後で再試行できますが、今度のリリースで今のところ、既存の使用例に影響を与えないように戻りましょう。
git reset
生成されますORIG_HEAD
。したがってrm
、手動で行う必要があります。たとえば、stackoverflow.com / a / 12418078/6309をご覧ください。
私の理解では、HEADは現在のブランチを指しているのに対し、ORIG_HEADは「危険な」操作を行う前に以前のHEADを格納するために使用されています。
たとえば、git-rebaseとgit-amは、変更を適用する前にブランチの元のヒントを記録します。
git branch foo -b
したコミットのブランチを「作成」するために行います。
からman 7 gitrevisions
:
HEADは、作業ツリーでの変更のベースとなったコミットに名前を付けます。FETCH_HEADは、最後のgit fetch呼び出しでリモートリポジトリからフェッチしたブランチを記録します。ORIG_HEADは、HEADを大幅に移動するコマンドによって作成され、操作前のHEADの位置を記録します。これにより、ブランチの先端を実行前の状態に簡単に戻すことができます。MERGE_HEADは、git mergeを実行したときにブランチにマージするコミットを記録します。CHERRY_PICK_HEADは、git cherry-pickを実行したときに選択したコミットを記録します。
HEAD
は(今後のgit1.8.4) '@
'です!以下の私の編集済みの回答を