これらは2つの異なるHEADSである必要があると思うので、なぜそれらが同じsha値、つまり2aad8cbに対応するのか...
git reflog
2aad8cb HEAD@{0}: checkout: moving from master to xxx_master
2aad8cb HEAD@{1}: clone: from git@github.com:xxx/xxx.git
これらは2つの異なるHEADSである必要があると思うので、なぜそれらが同じsha値、つまり2aad8cbに対応するのか...
git reflog
2aad8cb HEAD@{0}: checkout: moving from master to xxx_master
2aad8cb HEAD@{1}: clone: from git@github.com:xxx/xxx.git
git branch newbranch
またはを介して最初に新しいブランチを作成するときgit checkout -b newbranch master
、newbranch
はブランチポイントとまったく同じコミットを指します(最初の例またはmaster
2番目の例のHEADが何であれ)。したがって、たとえば、両方が同じSHAを持っていることを確認するのは正常master
ですnewbranch
。いずれかのブランチで新しいコミットを作成すると、そのブランチは新しいコミットを指します。新しいコミットは、前の値を親として持ちます(マージなどの説明を避けるために単純化しすぎています)。
これは通常の動作です。reflogは、頭がどこにあったか、枝がどこにあったかを追跡します。そうやって
git checkout master
git checkout experiment
git checkout master
git checkout experiment
git checkout master
git checkout experiment
で終わる
2aad8cb HEAD@{0}: checkout: moving from master to experiment
d8cbf4b HEAD@{1}: checkout: moving from experiment to master
2aad8cb HEAD@{2}: checkout: moving from master to experiment
d8cbf4b HEAD@{3}: checkout: moving from experiment to master
2aad8cb HEAD@{4}: checkout: moving from master to experiment
d8cbf4b HEAD@{5}: checkout: moving from experiment to master
reflogで。値が繰り返されているのがわかります。
ここではgit checkout -
、SHA-1(取り外したヘッド)とマスターのチェックアウトを切り替えるために数回使用しました。
5016d9e (HEAD, origin/master, master) HEAD@{0}: checkout: moving from 5016d9e82379923c21268e73e4dad3122a5639ac to master
5016d9e (HEAD, origin/master, master) HEAD@{1}: checkout: moving from master to 5016d9e82379923c21268e73e4dad3122a5639ac
5016d9e (HEAD, origin/master, master) HEAD@{2}: checkout: moving from 5016d9e82379923c21268e73e4dad3122a5639ac to master
5016d9e (HEAD, origin/master, master) HEAD@{3}: checkout: moving from master to 5016d9e82379923c21268e73e4dad3122a5639ac
5016d9e (HEAD, origin/master, master) HEAD@{4}: checkout: moving from 5016d9e82379923c21268e73e4dad3122a5639ac to master
同じSHA1エントリが繰り返されていることがわかります。