为什么新头和老头使用 git reflog 具有相同的 SHA ID



我认为这应该是两个不同的 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 newbranchgit checkout -b newbranch master 创建新分支时,newbranch将指向与分支点完全相同的提交(无论第一个示例中的 HEAD 是什么,还是第二个示例中的 master)。因此,例如,看到masternewbranch都具有相同的 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 条目重复。

相关内容

  • 没有找到相关文章

最新更新