【问题标题】:why new head and old head have the same sha id using git reflog?为什么新头和旧头使用 git reflog 具有相同的 sha id?
【发布时间】:2012-09-12 00:49:36
【问题描述】:

我认为这应该是两个不同的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

【问题讨论】:

  • AFAIK 克隆将一个 repo 复制到一个新目录中,HEAD 应该与它的克隆相同...
  • 其实我并没有使用克隆,我只是创建了一个名为 xxx_master 的新分支,然后签出那个新分支...
  • 在这一点上,master 和 xxx_master 似乎都指向同一个提交 (2aad8cb),因此在它们之间切换,虽然它确实创建了 reflog 条目,但实际上并没有切换签出哪个提交。

标签: git version-control git-reflog


【解决方案1】:

这是正常行为。 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

在引用日志中。您可以看到重复的值。

在这里,我曾多次使用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 条目重复。

【讨论】:

    【解决方案2】:

    当您第一次通过git branch newbranch 或git checkout -b newbranch master 创建新分支时,newbranch 将指向与分支点完全相同的提交(无论第一个示例中的 HEAD 是什么,或者第二个示例中的 master) .因此,例如,master 和 newbranch 都具有相同的 SHA 是很正常的。当您在任一分支上创建新提交时,该分支将指向新提交,该新提交将以前的值作为其父级(过度简化以避免讨论合并等)。

    【讨论】:

      猜你喜欢
      • 2013-07-25
      • 2015-03-18
      • 1970-01-01
      • 2018-08-10
      • 2015-12-13
      • 2016-02-13
      • 2021-08-20
      • 1970-01-01
      • 2015-03-25
      相关资源
      最近更新 更多