为了账号安全,请及时绑定邮箱和手机立即绑定

Git本地没有push,本地仓库打了tag之后只把tag push了,远程仓库该tag下是最新的代码吗?

Git本地没有push,本地仓库打了tag之后只把tag push了,远程仓库该tag下是最新的代码吗?

慕码人8056858 2019-05-09 22:21:08
Git本地没有push,本地仓库打了tag之后只把tagpush了,远程仓库该tag下是最新的代码吗?
查看完整描述

2 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

这个问题很好玩,也很简单,只要自己实际操作一把就可以发现,该tag下的代码是最新的。不过要搞明白为什么,还需要明白Git里的对象和引用这两个概念。
Git一共有四种类型的对象:数据对象(blobobject)、树对象(treeobject)、提交对象(commitobject)和标签对象(tagobject)。其中标签对象和提交对象非常类似,可以理解为是提交对象的一个引用。我们每次运行gitadd和gitcommit命令时,实际上是将被改写的文件保存为数据对象和树对象,并创建一个提交对象指向顶层的树对象,这些对象保存在.git/objects目录下。
其次,Git一共有三种类型的引用:HEAD引用、标签引用和远程引用,他们分别保存在refs/heads、refs/tags和refs/remotes三个目录下。HEAD引用代表你创建的代码分支,标签引用代表你创建的所有标签。你可以打开三个目录下的文件看看,实际上就是一个纯文本文件,里面记录着提交对象(或标签对象)的SHA-1哈希值,代表这个引用指向哪一次提交。
所以,当你推一个tag到远程仓库时,是在远程仓库的refs/tags目录下创建一个标签引用,它要指向一个提交对象,而这个对象由于你还没push,也会打包发送到服务器上。但是,由于HEAD引用并没有更新,所以随便checkout到哪个分支都看不到这次提交,只有checkout到指定的tag,才能看到这次提交。
                            
查看完整回答
反对 回复 2019-05-09
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

是最新的。
gitadd.
gitcommit-m'test'
gittag'v1.0.0'
gitpush--tags
如果你是这么操作的,那么远程仓库中,注释为test的提交只会出现在tagv1.0.0中
                            
查看完整回答
反对 回复 2019-05-09
  • 2 回答
  • 0 关注
  • 401 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信