キャレット(^)文字はどういう意味ですか?


124

削除されたファイルをgitで復元するのに役立つ質問への回答がこちらにありました。

解決策は

git checkout <deleting_commit>^ -- <deleted_file_path>

キャレット文字(^)は何をしますか?他の場所でgitで非常に便利なことをしているのを見たことがあります。それは魔法です。誰かが私のためにそれを台無しにして、それが何をするか教えてください?


8
Windowsでの参考:^はDOSシェルでは期待どおりに機能しません。git bashシェルを使用すると、動作します。
シンシナティジョー

5
私がそれを使おうとしたとき(それが何を意味するのかを推測して)、それは私にも起こりませんでした。キャレット(^)は、cmd.exeのエスケープ文字です。参考になるかどうかを確認するためにそれを使用しようとするたびに、実際には何も渡さなかったため、結果に違いがなかった理由がわかります。> _>愚かなcmd.exe。それを2倍にするか引用することによって、それをエスケープすることができます: git log master^^またはgit log "master^"
bambams

回答:


138

HEAD^ 現在の枝の先端の最初の親を意味します。

git commitは複数の親を持つことができることに注意してください。HEAD^はの略でありHEAD^1HEAD^2必要に応じてアドレスなどを指定することもできます。

だけでなく、任意のコミットの親に到達できますHEAD。世代間を移動することもできます。たとえば、master~2マスターブランチの先端の祖父母を意味し、あいまいな場合は最初の親を優先します。これらの指定子は、任意に連鎖させることができます例えばtopic~3^2Gitの違いは何ですか?に関連する回答を参照してくださいHEAD^HEAD~

詳細については、の「リビジョンの指定」セクションを参照してくださいgit rev-parse --help


1
しかし、その後、線形履歴で、なぜHEAD^^^3番目に古いコミットを返すのか、つまりこれは次と同等HEAD~~~ですか?
Vorac、2014年

1
@Vorac線形履歴については、そうです。
グレッグベーコン2014年

21

「の親」を意味します。つまりHEAD^、「現在のHEADの親」を意味します。それらをチェーンすることもできます。HEAD^^つまり、「現在のHEADの親の親」(つまり、現在のHEADの祖父母)をHEAD^^^意味し、「現在のHEAD の親の親の親」を意味します。


16

^場合(キャレット)も使用することができる範囲を指定します

コミットから到達可能なコミットを除外するには、プレフィックス^表記を使用します。たとえば、^ r1 r2は、r2から到達可能なコミットを意味しますが、r1から到達可能なコミットは除外します。

<回転>

から到達可能なコミット(つまり、祖先)を含めます。

^ <rev>

から到達可能なコミット(つまり、その祖先)を除外します。


10

ここに視覚的な説明があります。次のような履歴があるとします。

                      master  
  ... <- B <- C <- D
             /
... <- E <- F
              feature

機能がマスターにマージされたときC、2つの祖先で作成されました。Gitはこれらの祖先に番号を割り当てます。メインラインの祖先にBは1が割り当てられ、フィーチャーの祖先にFは2が割り当てられます。

したがって、C^1はを指し、はBC^2指しFます。C^のエイリアスですC^1

あなただけが使用します<rev>^3。3つのブランチのマージを実行した場合。


7

キャレットは、特定のコミットの親を指します。たとえばHEAD^、現在のHEADコミットの親を参照します。(また、HEAD^^祖父母を指します)。


4

カラットはコミットオフセット(親)を表します。したがって、たとえば、HEAD^「HEADからの1つのコミット」をHEAD^^^意味し、「HEADからの3つのコミット」を意味します。


4

(^)はコマンドの親ソースを取得します。つまり、HEAD ^はHEADの親を取得します。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.