猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
Git本地没有push,本地仓库打了tag之后只把tag push了,远程仓库该tag下是最新的代码吗?
Git本地没有push,本地仓库打了tag之后只把tagpush了,远程仓库该tag下是最新的代码吗?
慕码人8056858
浏览 402
回答 2
2回答
万千封印
这个问题很好玩,也很简单,只要自己实际操作一把就可以发现,该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,才能看到这次提交。
0
0
0
犯罪嫌疑人X
是最新的。gitadd.gitcommit-m'test'gittag'v1.0.0'gitpush--tags如果你是这么操作的,那么远程仓库中,注释为test的提交只会出现在tagv1.0.0中
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
JavaScript
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续