最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Git Tag打、切換、推送和刪除的操作指南

 更新時間:2026年05月27日 08:26:34   作者:一勺菠蘿丶  
本篇文章詳細(xì)介紹了Git標(biāo)簽(tag)的的使用方法,包括標(biāo)簽的定義、與分支(branch)的區(qū)別、常見操作如創(chuàng)建、查看、推送等刪除標(biāo)簽,以及如何基于標(biāo)簽部署代碼和切換版本,文章還提供了完整的發(fā)版流程示例和常用命令速查表,幫助開發(fā)者更高效地地地代碼版本

在 Git 項目開發(fā)中,經(jīng)常會遇到這樣的場景:

  • 項目準(zhǔn)備上線,需要記錄一個穩(wěn)定版本
  • 后續(xù)出問題,需要回到某個歷史版本
  • 前端、后端、運(yùn)維需要根據(jù)版本號部署代碼
  • Docker 鏡像、發(fā)布包、生產(chǎn)環(huán)境需要和代碼版本對應(yīng)

這個時候就會用到 Git 的 Tag

簡單來說:

Git Tag 就是給某一次 commit 打一個固定的版本標(biāo)記。

比如:

v1.0.0
v1.1.0
v2.0.0
release-2026-05-26

它可以幫助我們準(zhǔn)確找到某個版本對應(yīng)的代碼。

一、Tag 是什么?

Git 里面的 Tag,可以理解為:

給某一次代碼提交做一個固定標(biāo)記

比如你的提交歷史是這樣的:

A --- B --- C --- D --- E
          ↑
        v1.0.0

如果你在 C 這個 commit 上打了一個 v1.0.0 的 tag,那么以后不管你繼續(xù)提交多少代碼,v1.0.0 永遠(yuǎn)都指向 C。

后續(xù)你繼續(xù)開發(fā):

A --- B --- C --- D --- E
          ↑           ↑
        v1.0.0      main

這時候:

  • main 分支已經(jīng)走到了 E
  • v1.0.0 還是停在 C
  • tag 不會因為你后續(xù)修改代碼而改變

二、Tag 和 Branch 的區(qū)別

很多新手容易把 Tag 和 Branch 搞混。

可以這樣理解:

branch = 會繼續(xù)變化的開發(fā)線
tag    = 固定不變的版本快照

例如:

main 分支:一直往前開發(fā)
v1.0.0 tag:永遠(yuǎn)指向發(fā)布 v1.0.0 時的那個 commit

Branch 適合什么?

Branch 適合開發(fā):

main
dev
feature-login
fix-order-bug

比如你要開發(fā)一個登錄功能,可以創(chuàng)建一個分支:

git checkout -b feature-login

后面你會不斷在這個分支上提交代碼。

Tag 適合什么?

Tag 適合發(fā)版:

v1.0.0
v1.1.0
v2.0.0

比如你項目上線了,就可以打一個 tag:

git tag -a v1.0.0 -m "發(fā)布 v1.0.0 版本"

以后你就可以通過這個 tag 找回上線時的代碼。

三、查看當(dāng)前項目有哪些 Tag

查看本地所有 tag:

git tag

輸出示例:

v1.0.0
v1.1.0
v1.2.0

如果 tag 很多,可以模糊搜索:

git tag -l "v1.*"

輸出示例:

v1.0.0
v1.1.0
v1.2.0

四、如何打 Tag

Git 打 Tag 常見有兩種方式:

  1. 輕量 Tag
  2. 附注 Tag

實際開發(fā)中,更推薦使用 附注 Tag。

五、輕量 Tag

輕量 tag 就是簡單地給當(dāng)前 commit 做一個標(biāo)記。

git tag v1.0.0

這個命令會給當(dāng)前所在的 commit 打上 v1.0.0 標(biāo)簽。

查看 tag:

git tag

查看 tag 對應(yīng)的信息:

git show v1.0.0

輕量 tag 比較簡單,但是沒有額外的說明信息,不太適合正式發(fā)版。

六、推薦方式:附注 Tag

附注 Tag 可以帶版本說明、創(chuàng)建人、創(chuàng)建時間等信息,更適合正式發(fā)布版本。

命令格式:

git tag -a 標(biāo)簽名 -m "說明信息"

例如:

git tag -a v1.0.0 -m "發(fā)布 v1.0.0:完成基礎(chǔ)功能"

查看 tag 信息:

git show v1.0.0

輸出中會包含:

  • tag 名稱
  • tag 創(chuàng)建人
  • tag 創(chuàng)建時間
  • tag 說明信息
  • 對應(yīng)的 commit 信息

正式項目中建議使用這種方式。

七、給指定 commit 打 Tag

有時候你不是給當(dāng)前 commit 打 tag,而是想給某個歷史 commit 打 tag。

先查看提交記錄:

git log --oneline

示例:

e8f9a12 修復(fù)庫存調(diào)撥 bug
c3a7b91 完成庫存調(diào)撥功能
a9d2c33 初始化項目

如果你想給 c3a7b91 這個 commit 打 tag:

git tag -a v1.0.0 c3a7b91 -m "發(fā)布 v1.0.0:完成庫存調(diào)撥功能"

查看:

git show v1.0.0

這樣 v1.0.0 就會指向 c3a7b91 這個 commit,而不是當(dāng)前最新 commit。

八、打完 Tag 后,后續(xù)修改代碼會影響原來的 Tag 嗎?

不會。

Tag 打完之后,它會固定指向當(dāng)時的 commit。

例如:

A --- B --- C
          ↑
        v1.0.0

然后你繼續(xù)開發(fā),提交了新的代碼:

A --- B --- C --- D --- E
          ↑           ↑
        v1.0.0      main

這時候:

  • v1.0.0 還是指向 C
  • main 已經(jīng)到了 E
  • 后續(xù)修改不會影響 v1.0.0

如果你要發(fā)布新版本,需要重新打一個新 tag:

git tag -a v1.1.0 -m "發(fā)布 v1.1.0:新增訂單功能"

最終可能是這樣:

A --- B --- C --- D --- E
          ↑           ↑
        v1.0.0      v1.1.0

九、推送 Tag 到遠(yuǎn)程倉庫

注意:本地打完 tag 后,默認(rèn)只存在本地,遠(yuǎn)程倉庫是看不到的。

你需要手動推送 tag。

推送指定 tag:

git push origin v1.0.0

推送所有本地 tag:

git push origin --tags

一般建議推送指定 tag,避免把本地一些測試 tag 也推上去:

git push origin v1.0.0

十、完整發(fā)版流程示例

假設(shè)你現(xiàn)在項目開發(fā)完成,準(zhǔn)備發(fā)布 v1.0.0

1. 查看當(dāng)前狀態(tài)

git status

如果有修改,先提交:

git add .
git commit -m "完成庫存調(diào)撥功能"

2. 確認(rèn)當(dāng)前分支

git branch

或者:

git status

確認(rèn)你在正確的分支上,比如 main

3. 拉取最新代碼

git pull origin main

避免本地代碼落后于遠(yuǎn)程。

4. 推送代碼

git push origin main

5. 打 tag

git tag -a v1.0.0 -m "發(fā)布 v1.0.0:完成庫存調(diào)撥功能"

6. 推送 tag

git push origin v1.0.0

這樣遠(yuǎn)程倉庫就有了 v1.0.0 這個版本。

十一、如何切換到某個 Tag

切換到某個 tag:

git checkout v1.0.0

或者新版本 Git 推薦用:

git switch --detach v1.0.0

切換后,你會進(jìn)入一個特殊狀態(tài),叫做:

detached HEAD

中文可以理解為:

游離 HEAD 狀態(tài)

這是什么意思?

意思是你現(xiàn)在不是在某個分支上,而是臨時查看 tag 對應(yīng)的代碼。

十二、什么是 detached HEAD?

當(dāng)你執(zhí)行:

git checkout v1.0.0

Git 可能會提示:

You are in 'detached HEAD' state.

很多新手看到這個提示會害怕,其實不用怕。

它的意思是:

你現(xiàn)在正在查看某個固定版本,而不是在分支上繼續(xù)開發(fā)

例如:

A --- B --- C --- D --- E
          ↑           ↑
        v1.0.0      main

你切換到 v1.0.0 后,當(dāng)前代碼就是 C 那個版本。

這個時候適合做這些事情:

  • 查看歷史代碼
  • 對比問題
  • 本地運(yùn)行舊版本
  • 確認(rèn)某個版本是否有 bug

但是不建議直接在 detached HEAD 狀態(tài)下繼續(xù)開發(fā)。

十三、從 Tag 切回主分支

如果你只是查看舊版本,看完后想回到主分支:

git checkout main

或者:

git switch main

如果你的主分支叫 master

git checkout master

或者:

git switch master

十四、如果想基于某個 Tag 修改代碼怎么辦?

不要直接在 tag 上改。

因為 tag 是固定版本,不適合直接繼續(xù)開發(fā)。

正確做法是:基于這個 tag 創(chuàng)建一個新分支。

例如你想基于 v1.0.0 修復(fù) bug:

git checkout -b fix-v1.0.0-bug v1.0.0

或者:

git switch -c fix-v1.0.0-bug v1.0.0

這行命令的意思是:

從 v1.0.0 這個版本創(chuàng)建一個新分支 fix-v1.0.0-bug

然后你就可以在這個新分支上正常修改代碼、提交代碼。

git add .
git commit -m "修復(fù) v1.0.0 版本中的庫存 bug"

如果修復(fù)完成后要發(fā)布補(bǔ)丁版本,可以再打一個新 tag:

git tag -a v1.0.1 -m "發(fā)布 v1.0.1:修復(fù)庫存 bug"
git push origin fix-v1.0.0-bug
git push origin v1.0.1

十五、切換 Tag 后修改了代碼怎么辦?

假設(shè)你執(zhí)行了:

git checkout v1.0.0

然后你不小心修改了代碼。

這時候先不要慌。

查看當(dāng)前狀態(tài):

git status

如果你只是誤改了,不想保留:

git restore .

如果你想保留這些修改,應(yīng)該創(chuàng)建一個新分支:

git switch -c fix-from-v1.0.0

然后提交:

git add .
git commit -m "基于 v1.0.0 修復(fù)問題"

這樣你的修改就不會丟失,也不會直接影響原來的 tag。

十六、查看某個 Tag 對應(yīng)的代碼差異

查看 tag 的詳細(xì)信息:

git show v1.0.0

查看兩個 tag 之間的差異:

git diff v1.0.0 v1.1.0

查看兩個 tag 之間的提交記錄:

git log v1.0.0..v1.1.0 --oneline

這個命令很適合用來寫版本更新日志。

例如:

git log v1.0.0..v1.1.0 --oneline

輸出:

e8f9a12 修復(fù)庫存調(diào)撥 bug
a7c2d11 新增訂單導(dǎo)出功能
b6d9f21 優(yōu)化登錄頁面

十七、刪除本地 Tag

如果你本地 tag 打錯了,可以刪除。

刪除本地 tag:

git tag -d v1.0.0

注意:這只會刪除本地 tag,不會刪除遠(yuǎn)程 tag。

十八、刪除遠(yuǎn)程 Tag

如果 tag 已經(jīng)推送到遠(yuǎn)程倉庫,也需要刪除遠(yuǎn)程 tag。

刪除遠(yuǎn)程 tag:

git push origin --delete v1.0.0

或者:

git push origin :refs/tags/v1.0.0

推薦使用第一種:

git push origin --delete v1.0.0

十九、修改已經(jīng)打好的 Tag

嚴(yán)格來說,不建議修改已經(jīng)發(fā)布的 tag。

因為 tag 一旦推送到遠(yuǎn)程,其他人可能已經(jīng)使用了它。

如果你確實打錯了,比如 v1.0.0 指向了錯誤 commit,可以這樣處理:

1. 刪除本地錯誤 tag

git tag -d v1.0.0

2. 刪除遠(yuǎn)程錯誤 tag

git push origin --delete v1.0.0

3. 重新打 tag

git tag -a v1.0.0 正確的commitId -m "發(fā)布 v1.0.0"

例如:

git tag -a v1.0.0 c3a7b91 -m "發(fā)布 v1.0.0"

4. 重新推送 tag

git push origin v1.0.0

但是要注意:如果這個 tag 已經(jīng)被別人拉取過,最好通知團(tuán)隊成員重新同步。

二十、拉取遠(yuǎn)程 Tag

一般執(zhí)行:

git fetch

就會拉取遠(yuǎn)程分支信息,但不一定拉取所有 tag。

可以單獨(dú)拉取 tag:

git fetch --tags

如果你想從遠(yuǎn)程獲取最新 tag,可以執(zhí)行:

git fetch origin --tags

查看:

git tag

二十一、根據(jù) Tag 部署代碼

很多時候,服務(wù)器上線時不是直接拉 main 最新代碼,而是拉某個穩(wěn)定 tag。

例如上線 v1.0.0

git fetch --tags
git checkout v1.0.0

如果你需要基于 tag 創(chuàng)建部署分支:

git checkout -b deploy-v1.0.0 v1.0.0

然后安裝依賴、構(gòu)建、啟動服務(wù)。

前端示例:

npm install
npm run build

后端示例:

npm install
npm run start

或者使用 Docker:

docker build -t my-app:v1.0.0 .
docker run -d --name my-app -p 3000:3000 my-app:v1.0.0

這樣 Docker 鏡像版本和 Git Tag 版本就對應(yīng)起來了。

二十二、Tag 命名規(guī)范

常見 tag 命名:

v1.0.0
v1.1.0
v2.0.0

推薦使用語義化版本號:

主版本號.次版本號.修訂號

例如:

v1.2.3

含義:

1 = 主版本號,通常表示大版本升級,可能有不兼容變化
2 = 次版本號,通常表示新增功能
3 = 修訂號,通常表示 bug 修復(fù)

示例:

修復(fù) bug:

v1.0.1

新增功能:

v1.1.0

大版本升級:

v2.0.0

也可以根據(jù)日期命名:

release-2026-05-26

不過一般項目更推薦:

v1.0.0
v1.1.0
v1.1.1

二十三、常用命令速查表

查看所有 tag

git tag

查看匹配的 tag

git tag -l "v1.*"

創(chuàng)建輕量 tag

git tag v1.0.0

創(chuàng)建附注 tag

git tag -a v1.0.0 -m "發(fā)布 v1.0.0"

給指定 commit 打 tag

git tag -a v1.0.0 commitId -m "發(fā)布 v1.0.0"

查看 tag 信息

git show v1.0.0

推送指定 tag

git push origin v1.0.0

推送所有 tag

git push origin --tags

拉取遠(yuǎn)程 tag

git fetch --tags

切換到 tag

git checkout v1.0.0

使用 switch 切換到 tag

git switch --detach v1.0.0

從 tag 創(chuàng)建新分支

git checkout -b fix-v1.0.0 v1.0.0

或者:

git switch -c fix-v1.0.0 v1.0.0

刪除本地 tag

git tag -d v1.0.0

刪除遠(yuǎn)程 tag

git push origin --delete v1.0.0

查看兩個 tag 之間的差異

git diff v1.0.0 v1.1.0

查看兩個 tag 之間的提交記錄

git log v1.0.0..v1.1.0 --oneline

二十四、新手常見問題

1. 打完 tag 后,我繼續(xù)修改代碼,tag 會變嗎?

不會。

Tag 會固定指向打 tag 時的 commit。后續(xù)你繼續(xù)提交代碼,只會讓分支往前走,不會影響原來的 tag。

2. 為什么我本地有 tag,遠(yuǎn)程倉庫看不到?

因為 tag 默認(rèn)不會自動推送。

需要執(zhí)行:

git push origin v1.0.0

或者:

git push origin --tags

3. 切換 tag 后提示 detached HEAD 是不是出錯了?

不是。

這是正?,F(xiàn)象。

表示你現(xiàn)在正在查看一個固定版本,而不是在某個分支上開發(fā)。

如果只是查看代碼,不用管。

如果要修改代碼,建議創(chuàng)建新分支:

git switch -c fix-from-v1.0.0

4. 可以直接在 tag 上修改代碼嗎?

不建議。

Tag 是固定版本標(biāo)記,不適合直接繼續(xù)開發(fā)。

正確方式是從 tag 創(chuàng)建新分支:

git checkout -b fix-v1.0.0 v1.0.0

5. tag 打錯了怎么辦?

如果還沒推送遠(yuǎn)程:

git tag -d v1.0.0
git tag -a v1.0.0 正確commitId -m "發(fā)布 v1.0.0"

如果已經(jīng)推送遠(yuǎn)程:

git tag -d v1.0.0
git push origin --delete v1.0.0
git tag -a v1.0.0 正確commitId -m "發(fā)布 v1.0.0"
git push origin v1.0.0

但是如果團(tuán)隊成員已經(jīng)使用過這個 tag,需要通知大家重新同步。

6. 如何知道當(dāng)前代碼是不是某個 tag?

可以執(zhí)行:

git describe --tags

如果當(dāng)前 commit 正好在某個 tag 上,可能輸出:

v1.0.0

如果當(dāng)前 commit 在 tag 后面,可能輸出:

v1.0.0-3-gabc1234

意思是:

當(dāng)前代碼基于 v1.0.0 之后又多了 3 個 commit

二十五、推薦的實際工作流

一個比較規(guī)范的發(fā)版流程如下:

# 1. 查看當(dāng)前狀態(tài)
git status

# 2. 提交代碼
git add .
git commit -m "完成 xxx 功能"

# 3. 拉取遠(yuǎn)程最新代碼
git pull origin main

# 4. 推送代碼
git push origin main

# 5. 打 tag
git tag -a v1.0.0 -m "發(fā)布 v1.0.0:完成 xxx 功能"

# 6. 推送 tag
git push origin v1.0.0

如果后續(xù)發(fā)現(xiàn) v1.0.0 有 bug,需要修復(fù):

# 1. 基于 v1.0.0 創(chuàng)建修復(fù)分支
git checkout -b fix-v1.0.0-bug v1.0.0

# 2. 修改代碼后提交
git add .
git commit -m "修復(fù) v1.0.0 中的 xxx bug"

# 3. 打補(bǔ)丁 tag
git tag -a v1.0.1 -m "發(fā)布 v1.0.1:修復(fù) xxx bug"

# 4. 推送修復(fù)分支
git push origin fix-v1.0.0-bug

# 5. 推送新 tag
git push origin v1.0.1

二十六、總結(jié)

Git Tag 的核心作用就是:

給某一次 commit 做版本標(biāo)記

它最常用于:

  • 項目發(fā)版
  • 生產(chǎn)部署
  • 版本回滾
  • 生成發(fā)布記錄
  • Docker 鏡像版本對應(yīng)
  • 查看歷史穩(wěn)定版本

需要記住幾個重點(diǎn):

1. tag 是固定的,后續(xù)修改代碼不會影響原來的 tag
2. 本地打 tag 后,需要手動 push 到遠(yuǎn)程
3. 切換 tag 后出現(xiàn) detached HEAD 是正常的
4. 不建議直接在 tag 上開發(fā)
5. 如果要基于 tag 修改代碼,應(yīng)該從 tag 創(chuàng)建新分支
6. 正式發(fā)版推薦使用附注 tag:git tag -a

最常用的幾個命令:

# 打 tag
git tag -a v1.0.0 -m "發(fā)布 v1.0.0"

# 推送 tag
git push origin v1.0.0

# 查看 tag
git tag

# 切換 tag
git checkout v1.0.0

# 從 tag 創(chuàng)建分支
git checkout -b fix-v1.0.0 v1.0.0

# 刪除本地 tag
git tag -d v1.0.0

# 刪除遠(yuǎn)程 tag
git push origin --delete v1.0.0

以上就是Git Tag打、切換、推送和刪除的操作指南的詳細(xì)內(nèi)容,更多關(guān)于Git Tag打、切換、推送和刪除的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評論

岑巩县| 城市| 万源市| 阳朔县| 泉州市| 云阳县| 星子县| 营口市| 翼城县| 钟山县| 仙游县| 汉阴县| 张家港市| 凌海市| 尉氏县| 安岳县| 凤城市| 太谷县| 伊川县| 金寨县| 陇西县| 拜泉县| 晋中市| 南部县| 牟定县| 儋州市| 华容县| 修文县| 高邮市| 盘山县| 乐山市| 繁昌县| 遂昌县| 库尔勒市| 桓台县| 松原市| 安新县| 靖边县| 白沙| 丹棱县| 东乌|