Git HEAD^ vs Git HEAD~ vs Git HEAD{@}
この記事では、Git キャレットと Git チルダの違いについて説明します。Git キャレットは^
で表され、チルダは~
で表されます。
HEAD{@}
についても説明します。はじめましょう。
Git HEAD^
(キャレット)
Git HEAD
にキャレットを導入するときは、コミットの最初の親を指します。したがって、git HEAD^2
はコミットの 2 番目の親を指します。
コミットの親とは何ですか?
1つ以上のブランチを別のブランチとマージすると、コミットの親が機能します。例を見てみましょう。
私たちのリポジトリには、緑色の master
ブランチと黄色の other-branch
ブランチがあります。
other-branch
のコミット E
は、master
ブランチのコミット A
とマージされます。したがって、コミット A
には 2つの親コミットがあると言えます。
したがって、親コミットは単にコミットの前のコミットです。
以下のコマンドを見てください。
$ git show HEAD^ --oneline
上記のコマンドを実行すると、コミット A
の場合、コミット B
で HEAD
が移動します。
$ git show HEAD^2 --oneline
一方、上記のコマンドは、HEAD
をシフトして E
をコミットします。
HEAD^
と HEAD^1
は同じ目的を果たすことに注意してください。
上記の説明は、ブランチをマージした場合にのみ適用されることに注意してください。1つのブランチで作業している場合、HEAD^
は HEAD^
と同等になります。
Git HEAD~
(チルダ)
HEAD
にチルダを追加すると、ブランチの最後のコミットの前のコミットがポイントされます。まっすぐ戻るようなものです。
例を見てみましょう。
したがって、HEAD
がコミット A
にある場合、git HEAD~
または git HEAD~1
は、B
をコミットするようにシフトします。HEAD~2
は、C
をコミットするようにシフトします。
other-branch
のコミット E
でチェックアウトされた場合、HEAD~1
はコミット F
などにシフトします。
Git HEAD{@}
この組み合わせは、ローカルリポジトリ内の特定の時点での参照の位置を示します。以下に示すように、通常、git reflog
コマンドを実行するとポップアップします。
一言で言えば、他のブランチのブランチをマージするときにキャレットが役立ち、別のブランチのコミットに切り替える必要があります。チルダを使用すると、特定のブランチの最後のコミットの前のコミットにシフトできます。
単一のブランチで作業する場合、HEAD^
は HEAD~
と同じです。
John is a Git and PowerShell geek. He uses his expertise in the version control system to help businesses manage their source code. According to him, Shell scripting is the number one choice for automating the management of systems.
LinkedIn