我认为这应该是两个不同的 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
我认为这应该是两个不同的 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
当您第一次通过or创建新分支时git checkout -b newbranch master
,newbranch
将指向与分支点完全相同的提交(无论 HEAD 在第一个示例中还是master
在第二个示例中)。因此,例如,看到两者具有相同的 SHA 是很正常master
的newbranch
。当您在任一分支上创建新提交时,该分支将指向新提交,该新提交将以前的值作为其父级(过度简化以避免讨论合并等)。
那是正常的行为。reflog 会跟踪 head 曾经在哪里以及分支曾经在哪里。这样做
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(分离头)和 master 之间切换:
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 条目重复。