branch
branchと聞くと「枝」を想像してしまうので、僕はずっとbranchを「線」みたいなものだと思っていました。
実際、branchとはコミットハッシュを指すポインタのことです。
例えばmainブランチからdevelopmentブランチを切った場合、mainブランチとdeveopmentブランチが指すコミットハッシュは同じものです。
developmentブランチで作業後にコミットした場合、新しいコミットハッシュが作成されますが、developmentブランチはその新しいコミットハッシュを指すようになります(mainブランチが指すコミットハッシュは変わらない)。
公式サイトの図を見るととてもわかりやすいです。
HEAD
HEADは現在作業をしているブランチを指すポインタのことです。
branchがポインタであることを踏まえると、HEADはポインタを指すポインタです。
HEADの移動履歴は下記のコマンドで確認することができます。
git reflog
HEADはn回前の移動履歴をHEAD@{n}
のように表します。
~
を使うことでも表現でき、2回前の移動履歴はHEAD~~
と書くことができます。
git reset --hard HEAD@{n}
上記のコマンドでHEADの位置を移動させることができます。
この操作によってHEADが指すブランチが変わることはありません。 <=> ブランチが指すコミットハッシュが変わる(ブランチとHEADが共に移動する)
checkout
chekcoutはHEADを移動させることです。
git checkout branch_name
checkoutすることによって、ブランチが指すコミットハッシュが変わった場合は、そのコミットハッシュの内容がワークツリーに展開されます。
checkoutと同時にブランチ作成もしたい場合は下記のコマンドで実行することができます。
git checkout -b new_branch_name
「checkout」は8文字もあるので毎回打つのはめんどくさいと思います。
そんな時はaliasを作成しましょう。
↓