git 提交了 tag 而没有提交 commit 代码到远程的仓库问题(意思是,本地有一个 commit 未提交到远程,但是给当前commit 打上了 tag ,并且仅仅执行 git push --tags 提交 tag)
可以看到,上面新建了 tag-commit.txt 文件,并在本地生成了1个 commit 信息
生成 tag 信息
对刚生成的 commit 代码打上tag "tag-commit" (tag-commit 为本次打的 tag 名)
仅提交 tag 信息到远程仓库
可以看到 "new-tag" 说明在远程已提交新的 tag , 同时通过 git status 也看到 最新 commit 还没有提交到远程仓库,仅仅提交了 tag 到远程
观察远程仓库代码
对比远程和本地 commit-id 发现,远程 tag 对应的 commit-id 和本地相等,但是显示为 0 commit,这个是是什么意思呢,代码到底有没有推送到远程仓库呢
分析验证
在另外一个目录下(如下切换到 test 目录下)重新拉取仓库代码,看代码是否提交上去了。
重新在另外一个目录 clone 我们的代码后,通过两次 ls 命令,查看项目文件(主要是查看 tag-commit.txt 文件是否存在,这个文件就代表了我们最新的提交代码),
第一次,我们在 master 分支查看项目文件,发现并没有 tag-commit.txt 文件;
第二次,我们在切换到 tag 名为 "tag-commit" (记得这个名字吗,这个就是我们上面打的 tag)的 tag 下,发现存在 tag-commit.txt 文件,也就是存在最新的提交代码;
通过以上分析,我们可以得出结论,如果我们在本地生成了新的commit信息,并且给这个 commit 打上了 tag,在仅仅提交 tag,而不提交 commit 信息到远程仓库的情况下(即仅执行 git push origin --tag,此命令只会提交 tag 而不会提交 commit),我们最新的代码是会被提交到远程仓库,并且提交代码是记录在了 tag 中,而远程 commit 中,却没有最新代码。这是一个很神奇的效果。 也就是说,如果我们通过 tag 信息去检索代码,可以看到最新代码,但是如果通过 commmit 去查看,却看不到最新的代码。