我认为这应该是两个不同的 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
将指向与分支点完全相同的提交(无论第一个示例中的 HEAD 是什么,还是第二个示例中的 master
)。因此,例如,看到master
和newbranch
都具有相同的 SHA 是正常的。当您在任一分支上创建新提交时,该分支将指向新提交,该提交将以以前的值作为其父级(过度简化以避免讨论合并等)。
正常行为。引用日志跟踪头部曾经的位置和分支曾经的位置。所以做
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
在引用日志中。您可以看到值在重复。
在这里,我多次使用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 条目重复。