最後のコミットをステージング領域に戻したいときにgit reset --soft HEAD^
andを使用してきました。git reset --soft HEAD~1
私はそれらを交互に使用してきましたが、微妙な違いがあるかどうか疑問に思っていましたか? 存在しない場合、構文上の違いを説明できますか? ^
の単なるエイリアスですか~1
?
6 に答える
HEAD^
とは同じことをしていてもHEAD~1
、意味が少し異なります。HEAD^
はHEAD^1
、コミットの最初の親をHEAD^2
参照し、コミットの 2 番目の親を参照する の省略形です。HEAD~
はHEAD~1
、コミットの最初の親をHEAD~2
参照し、コミットの最初の親の最初の親を参照する の省略形です。これら 2 つの構文HEAD
は、マージ コミットでない限り互換性があります。マージ コミットの場合、複数の親 (マスター ブランチの前のコミットとマスターにマージされたブランチの前のコミット) を持つことができます。
HEAD^ と HEAD~1 は同じものです。
私のメモから:
ref ^ は ref の前のコミットを意味します。複数の ^ 文字を使用できます。例: HEAD^^^
ref ~n は、refの前の n 番目のコミットを意味します。例: HEAD~3
ベース参照 (HEAD など) がマージの結果である場合に対処できる、より複雑なフォームがあります。
実際には、非常に複雑になる可能性があります。https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.htmlを参照してください
違いは、HEAD~1
は線形履歴に使用されるのに対し、HEAD^
は複数の親を持つコミットを追跡できることです。
いいえ、HEAD^
and HEAD~1
(およびHEAD~
or HEAD^1
) は同じコミットを参照します。
^
コミットを記述する何かの後にまたはを追加する~
と、引数の前の部分で記述されたコミットの最初の親への参照が変更されます。
違いは、記号の後に数字が続く場合に発生します。番号が指定されていない場合1
は、使用された場合と同じように機能します。
に続く数字^
は、マージ コミットのどの親を使用するかを選択します (父または母を選択するのと似ています)。最初の親は、マージ コミットが作成されたときにチェックアウトされたコミットであり、他の親は、git merge
コマンドで名前が付けられたコミットです。
a に続く~
数字は、(各ステップで最初の親関係をたどって) 戻る世代の数を表し、1 は直接の親、2 は祖父母などです。
これらの表記は のように連鎖することもできますHEAD~3^2~5
が、通常は SHA1 ID を使用して、そのタイプの表記が必要なコミットを参照する方が簡単です。