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 去查看,卻看不到最新的代碼。