从Git标签v2.6.0-rc3创建分支后哈希与标签不符是什么原因?
问题描述
我当前的分支信息如下:
xxx@box:~/src$ git branch jira_6500 * main xxx@box:~/src$ git rev-parse main bfd271932228f8ce33b68b82ffee5ee3b2386a17 xxx@box:~/src$ git rev-parse jira_6500 bfd271932228f8ce33b68b82ffee5ee3b2386a17 xxx@box:~/src$
我尝试从标签v2.6.0-rc3创建新分支,操作如下:
xxx@box:~/src$ git rev-parse v2.6.0-rc3 ff8db8992102ca7ce76f55169d06173c888c9447 xxx@box:~/src$ git checkout -b test001 v2.6.0-rc3 Switched to a new branch 'test001' xxx@box:~/src$ git branch jira_6500 main * test001
之后我查看新分支的rev哈希值,预期应该和标签v2.6.0-rc3的哈希一致,但实际并不相符,反而和jira_6500分支的哈希相同:
xxx@box:~/src$ git rev-parse test001 bfd271932228f8ce33b68b82ffee5ee3b2386a17
我按照正常从标签创建分支的步骤操作,之前同类操作都没有问题,请问为什么会出现哈希值不符的情况?
问题排查与解决方案
出现该问题可按以下优先级排查原因:
- 标签名拼写错误
如果你输入的标签名实际不存在,Git会默认从当前所在的HEAD(你操作时处于main分支,对应哈希就是bfd2719...)创建新分支,正好符合你遇到的现象。可以执行git tag -l确认本地标签的准确名称,避免多空格、大小写错误(Windows、macOS等大小写不敏感的系统更容易触发该问题)。 - 存在重名本地分支
Git的引用优先级规则中,本地分支优先级高于标签。如果你本地恰好有一个名为v2.6.0-rc3的分支,执行创建分支命令时会默认从同名分支而非标签拉取新分支。可以执行git branch -a查看所有分支,确认是否存在重名分支。 - 附注标签的哈希认知偏差
如果你使用的是附注标签(annotated tag),git rev-parse 标签名返回的是标签对象本身的哈希,不是该标签指向的提交哈希。可以执行git rev-parse v2.6.0-rc3^{commit}拿到标签实际指向的提交哈希,和新分支的哈希比对,确认是否真的指向不一致。 - 本地标签未同步远程最新版本
如果该标签在远程有更新,本地还保留旧版本标签也会出现引用指向异常,可以执行git fetch origin --tags --force强制同步远程最新标签后重试创建分支操作。
内容的提问来源于stack exchange,提问作者smwikipedia
相关产品推荐
相关产品推荐

