GitLab 中的分支和標簽的定義及操作

(一)GitLab 中的分支和標簽的定義及操作
1. 分支(Branch)

定義
分支是代碼倉庫中的獨立開發路徑,允許你在不影響主線(通常是 mainmaster 分支)的情況下,進行實驗、開發新功能或修復錯誤。

相關命令

  • 創建分支

    git branch <branch-name>
    

    例如,git branch feature-login 會基于當前所在分支的最新提交創建一個名為 feature-login 的新分支。

  • 從指定起點創建分支

    git branch <branch-name> <start-point>
    

    例如,git branch bugfix-123 34a5678 以哈希值為 34a5678 的提交為起點創建 bugfix-123 分支。

  • 切換分支

    git checkout <branch-name>
    

    或者使用 git switch <branch-name>(Git 1.22.0 及以上版本)。

  • 創建并切換到新分支

    git checkout -b <branch-name>
    

    或者使用 git switch -c <branch-name>(Git 1.22.0 及以上版本)。

  • 查看分支

    git branch
    

    查看本地所有分支,當前所在分支前會有 * 標記。

  • 查看本地和遠程所有分支

    git branch -a
    
  • 刪除本地分支

    git branch -d <branch-name>
    

    如果分支還沒有合并到當前分支,Git 會拒絕刪除。使用 -D 強制刪除。

  • 刪除遠程分支

    git push origin --delete <branch-name>
    
2. 標簽(Tag)

定義
標簽是用于標記代碼倉庫中某個特定提交的輕量級引用,通常用于標記項目中的重要版本,如發布版本(v1.0.0、v2.0.0 等)。

相關命令

  • 創建輕量標簽

    git tag <tag-name>
    

    例如,git tag v1.0.0 創建一個輕量標簽。

  • 創建含注釋標簽

    git tag -a <tag-name> -m "注釋信息"
    

    例如,git tag -a v1.0.1 -m "Release version 1.0.1" 創建一個含注釋的標簽。

  • 查看標簽

    git tag
    

    列出所有本地標簽。

  • 查看標簽詳情

    git show <tag-name>
    

    查看標簽的詳細信息,包括關聯的提交信息、標簽的注釋(如果是含注釋標簽)。

  • 推送標簽到遠程倉庫

    git push origin <tag-name>
    

    或者推送所有標簽:

    git push origin --tags
    
  • 刪除本地標簽

    git tag -d <tag-name>
    
  • 刪除遠程標簽

    git push origin :refs/tags/<tag-name>
    

小結

分支和標簽在版本控制中扮演著不同的角色。分支用于并行開發,允許開發者在獨立的環境中進行實驗和開發,而標簽則用于標記特定的代碼版本,通常用于版本發布和記錄項目里程碑。

場景:開發一款電商網站

假設我們正在開發一款電商網站,項目使用 Git 進行版本控制,并托管在 GitLab 上。

1. 分支(Branch)

定義
分支是代碼倉庫中的一個獨立開發路徑,允許你在不影響主線代碼的情況下進行開發。

生產實例

  • 主線分支(mainmaster

    • 這是項目的主分支,包含了當前生產環境的穩定代碼。所有經過測試和驗證的功能都會合并到這里。
    • 例如,main 分支的代碼部署在生產服務器上,用戶可以訪問網站。
  • 開發分支(develop

    • 這是開發團隊的主要工作分支,用于集成新功能和修復。
    • 開發人員在 develop 分支上進行日常開發,然后定期將代碼合并到 main 分支。
  • 功能分支(feature/*

    • 當開發新功能時,開發人員會從 develop 分支創建一個功能分支,例如 feature/user-login
    • 在這個分支上,開發人員可以獨立開發用戶登錄功能,而不影響其他開發工作。
    • 完成后,通過合并請求(Merge Request)將代碼合并回 develop 分支。
  • 修復分支(fix/*

    • 如果在生產環境中發現了一個緊急問題,開發人員會從 main 分支創建一個修復分支,例如 fix/bug-123
    • 在這個分支上修復問題后,通過合并請求將代碼合并回 main 分支,并發布新版本。

小結
分支是動態的,用于開發和集成代碼。開發人員可以在分支上進行實驗、開發新功能或修復問題,而不會影響主線代碼的穩定性。

2. 標簽(Tag)

定義
標簽是代碼倉庫中某個特定提交的標記,通常用于標記項目的重要版本,如發布版本。

生產實例

  • 發布版本

    • 當開發團隊完成了一個新版本的開發,并且代碼已經通過測試,準備發布時,他們會創建一個標簽。
    • 例如,當 develop 分支的代碼合并到 main 分支后,開發團隊會創建一個標簽 v1.0.0
      git tag -a v1.0.0 -m "Release version 1.0.0"
      git push origin v1.0.0
      
    • 這個標簽 v1.0.0 標記了代碼的某個特定狀態,表示這是網站的第一個正式版本。
  • 回溯和修復

    • 如果在生產環境中發現了一個問題,開發人員可以查看標簽 v1.0.0,找到對應的代碼狀態。
    • 他們可以在這個基礎上創建一個修復分支,例如 fix/bug-123,修復問題后再次發布新版本,例如 v1.0.1
      git tag -a v1.0.1 -m "Release version 1.0.1 with bug fix"
      git push origin v1.0.1
      

小結
標簽是靜態的,用于標記代碼的某個特定狀態。它們通常用于發布版本,方便開發人員在需要時回溯到特定的代碼狀態。

(二)分支和標簽的差別
  • 分支

    • 用途:用于開發和集成代碼。
    • 特性:動態的,可以隨時修改和更新。
    • 操作:創建、切換、合并、刪除分支。
    • 示例feature/user-loginfix/bug-123
  • 標簽

    • 用途:用于標記代碼的特定狀態,通常是發布版本。
    • 特性:靜態的,一旦創建,不能修改。
    • 操作:創建、查看、刪除標簽。
    • 示例v1.0.0v1.0.1
生產實例總結
  • 分支

    • 開發人員在分支上進行功能開發和修復。
    • 通過合并請求將代碼集成到主線分支。
    • 例如:feature/user-loginfix/bug-123
  • 標簽

    • 在發布新版本時創建標簽。
    • 用于標記代碼的特定狀態,方便回溯和修復。
    • 例如:v1.0.0v1.0.1

通過這個生產實例,你可以清楚地看到分支和標簽在實際開發中的不同用途和操作方式。

(三)分支和標簽的切換
1. 標簽的切換命令

在 Git 中,標簽(Tag)本身并不是一個可以切換到的“工作區”,因為標簽只是一個指向特定提交的引用,而不是一個獨立的開發路徑(像分支那樣)。因此,你不能直接“切換”到一個標簽,但可以通過以下方式查看標簽對應的代碼狀態:

git checkout <tag-name>

例如:

git checkout v1.0.0

這會將你的工作區切換到標簽 v1.0.0 所指向的提交。此時,你的工作區會處于“分離頭指針”(Detached HEAD)狀態,這意味著你當前不在任何分支上。

2. 標簽與分支的原理區別
  • 分支

    • 分支是一個動態的開發路徑,可以隨時修改和更新。
    • 當你切換到一個分支(如 feature/user-login)時,你在該分支上所做的任何更改都會被記錄在這個分支的歷史中。
    • 分支有自己的提交歷史,可以獨立于其他分支進行開發。
  • 標簽

    • 標簽是一個靜態的引用,指向某個特定的提交。
    • 標簽不會像分支那樣有獨立的提交歷史。
    • 標簽通常用于標記重要的版本(如發布版本),而不是用于開發。
3. 標簽對應的分支

標簽本身并不直接關聯到某個分支,但它通常是從某個分支上的某個提交創建的。例如,你可能在一個分支(如 maindevelop)上創建了一個標簽。

示例:創建標簽并查看其對應的分支

假設你有一個項目,當前在 main 分支上,你剛剛發布了一個新版本 v1.0.0

創建標簽
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0
查看標簽對應的提交
git show v1.0.0

這會顯示標簽 v1.0.0 所指向的提交的詳細信息,包括提交的哈希值、提交信息、作者等。

查看標簽對應的分支

雖然標簽本身不直接關聯到某個分支,但你可以通過查看提交的哈希值來確定它來自哪個分支。例如:

git branch --contains <commit-hash>

假設標簽 v1.0.0 指向的提交哈希值是 abc123,你可以運行:

git branch --contains abc123

這會列出所有包含該提交的分支。通常,你會看到 main 分支(或你創建標簽時所在的分支)。

涉及的命令總結

創建標簽
git tag -a <tag-name> -m "注釋信息"
git push origin <tag-name>
查看標簽
git tag
git show <tag-name>
查看標簽對應的分支
git branch --contains <commit-hash>
切換到標簽對應的提交
git checkout <tag-name>

注意事項

  • 分離頭指針狀態:當你切換到一個標簽時,Git 會提示你處于“分離頭指針”狀態。這意味著你當前不在任何分支上,任何新的提交都不會被記錄在某個分支的歷史中。
  • 回到分支:完成查看后,建議切換回一個分支(如 maindevelop),以繼續開發:
    git checkout main
    

通過這些命令和操作,你可以清楚地管理標簽和分支,確保項目的版本控制清晰且高效。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/91177.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/91177.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/91177.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第2章 cmd命令基礎:常用基礎命令(3)

Hi~ 我是李小咖&#xff0c;主要從事網絡安全技術開發和研究。 本文取自《李小咖網安技術庫》&#xff0c;歡迎一起交流學習&#x1fae1;&#xff1a;https://imbyter.com 本節介紹的命令有顯示系統信息&#xff08;systeminfo&#xff09;、啟動指定程序&#xff08;start&am…

RabbitMQ 發送方確認的兩大工具 (With Spring Boot)

核心概念解析 發布者確認機制的核心思想是&#xff1a;將消息投遞的可靠性從“盡力而為”提升為“契約保證”。生產者不再是“發后不理”&#xff0c;而是與 Broker 建立一個雙向的溝通渠道。 在 Spring AMQP 的封裝下&#xff0c;這個機制主要由兩個回調接口實現&#xff1a; …

KONG API Gateway中的核心概念

在使用Kong API Gateway&#xff08;API網關&#xff09;時&#xff0c;理解其核心概念是掌握其工作原理的基礎。這些概念既體現了Kong的設計哲學&#xff0c;也決定了它如何適配復雜的API管理場景&#xff08;如微服務、多團隊協作等&#xff09;。本文將系統梳理Kong的核心概…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘jupyterlab’問題 摘要 在開發過程中&#xff0c;我們經常會遇到各種模塊安裝的問題&#xff0c;尤其是在使用PyCharm時&#xff0c;經常會遇到pip install時的…

3 運算符與表達式

運算符&#xff1a;對字面量或者變量進行操作的符號 表達式&#xff1a;用運算符把字面量或者變量連接起來符合java語法的式子就可以稱作表達式不同運算符連接的表達式體現的是不同類型的表達式int a 10; int b 20; int c a b;&#xff1a;運算符&#xff0c;并且是算術運算…

MySQL的單行函數:

目錄 函數的理解&#xff1a; MySQL的內置函數及分類&#xff1a; 單行函數&#xff1a; 數值函數&#xff1a; 基本函數&#xff1a; 角度與弧度互換函數&#xff1a; 三角函數&#xff1a; 指數與對數&#xff1a; 進制轉換&#xff1a; 字符串函數&#xff1a; 日…

設計模式(二十一)行為型:狀態模式詳解

設計模式&#xff08;二十一&#xff09;行為型&#xff1a;狀態模式詳解狀態模式&#xff08;State Pattern&#xff09;是 GoF 23 種設計模式中的行為型模式之一&#xff0c;其核心價值在于允許一個對象在其內部狀態改變時改變其行為&#xff0c;使得對象看起來像是修改了它的…

深入理解 Doris Compaction:提升查詢性能的幕后功臣

在 Doris 的數據存儲與查詢體系里&#xff0c;Compaction 是保障查詢效率、優化存儲結構的關鍵機制。如果你好奇 Doris 如何在高頻寫入后仍能高效響應查詢&#xff0c;或是想解決數據版本膨脹帶來的性能問題&#xff0c;這篇關于 Compaction 的深度解析值得收藏 &#x1f447; …

css 實現虛線效果的多種方式

使用邊框實現虛線 通過設置元素的邊框樣式來實現虛線效果。以下為示例代碼: .dashed {border: 1px dashed black; }使用 CSS 偽元素實現虛線 使用偽元素來模擬虛線的效果。以下為示例代碼: .dashed::before {content: "";display: block;height: 1px;border-bo…

深入剖析 RocketMQ 分布式事務:原理、流程與實踐

Apache RocketMQ 是一種分布式消息隊列系統&#xff0c;支持分布式事務消息&#xff0c;以確保在分布式系統中數據的一致性。它通過一種基于兩階段提交(2PC)的機制結合補償邏輯來實現分布式事務的最終一致性。以下是對 RocketMQ 分布式事務的詳細講解&#xff0c;包括其核心概念…

具身智能 自動駕駛相關崗位的技術棧與能力地圖

一、硬技能技術棧&#xff08;優先級排序&#xff09; 1. 核心領域技術&#xff08;★★★★★&#xff09;技術方向具體技能學習建議大模型實戰- VLA架構&#xff08;RT-2、PaLM-E&#xff09;開發/微調- 多模態對齊&#xff08;CLIP、Flamingo&#xff09;- 生成式策略&#…

實現了加載 正向 碰撞 雅可比 仿真

""" # 此示例從 URDF 文件中加載一個 UR10 機械臂的模型 # 隨后演示 Pinocchio 庫的基本功能,如正向運動學計算 # 雅可比矩陣計算、碰撞檢測以及動力學仿真 """ # 導入 meshcat 的幾何模塊,用于創建和管理可視化的幾何對象 import meshcat.geo…

【0基礎PS】PS工具詳解--畫筆工具

目錄前言一、畫筆工具的位置與快捷鍵?二、畫筆工具選項欄設置?三、畫筆工具的進階應用?四、常見問題及解決方法?總結前言 在 Photoshop 的眾多工具中&#xff0c;畫筆工具無疑是極具創造力和實用性的工具之一。無論是進行圖像繪制、照片修飾&#xff0c;還是特效制作&…

window10和ubuntu22.04雙系統之卸載ubuntu系統

window10和ubuntu22.04雙系統之卸載ubuntu系統&#xff09;1. 刪除Ubuntu系統占用的磁盤分區&#xff08;在Windows下操作&#xff09;2. 刪除ubuntu開機引導項1. winr出來終端提示框后輸入2. 然后會在命令行中顯示電腦的硬盤列表&#xff0c;輸入命令選擇安裝Windows的那個硬盤…

(C++)C++類和類的方法(基礎教程)(與Python類的區別)

前言&#xff1a; 本篇博客建議搭配&#xff1a;&#xff08;Python&#xff09;類和類的方法&#xff08;基礎教程介紹&#xff09;&#xff08;Python基礎教程&#xff09;-CSDN博客 一起學習使用&#xff1b; 源代碼&#xff1a; #include <iostream> #include &…

【NLP輿情分析】基于python微博輿情分析可視化系統(flask+pandas+echarts) 視頻教程 - 微博文章數據可視化分析-文章分類下拉框實現

大家好&#xff0c;我是java1234_小鋒老師&#xff0c;最近寫了一套【NLP輿情分析】基于python微博輿情分析可視化系統(flaskpandasecharts)視頻教程&#xff0c;持續更新中&#xff0c;計劃月底更新完&#xff0c;感謝支持。今天講解微博文章數據可視化分析-文章分類下拉框實現…

Git命令保姆級教程

Git 入門網站 https://learngitbranching.js.org/?localezh_CN Git 命令 git init // 在本地目錄內部會生成.git文件夾 git initgit clone // 從git服務器拉取代碼 // 代碼下載完成后在當前文件夾中會有一個 shop 的目錄&#xff0c;通過 cd shop 命令進入目錄。 git clone ht…

Java Ai For循環 (day07)

循環結構 for&#xff1a;循環語句的作用&#xff1a;可以將一段代碼重復的執行很多次for 循環語句格式&#xff1a;執行流程&#xff1a; 初始化語句執行條件判斷語句&#xff0c;看結果是 true&#xff0c;還是 false false結束&#xff0c;true繼續執行循環體語句執行條件控…

Directory Opus 使用優化

自定義快捷鍵 Directory Opus 移動標簽到另一欄 設置快捷鍵&#xff1a;ctrl←/→ 設置步驟&#xff1a; 打開【設置】—>選擇【自定義工具欄和快捷鍵】 選擇【新建】—>【新建窗口快捷鍵】 輸入快捷鍵命令 Go TABMOVEother此時可以點擊運行進行測試&#xff0c;…

Qt知識點2『Ubuntu24.04.2安裝Qt5.12.9各種報錯』

問題1&#xff1a;Qt安裝完畢后&#xff0c;新建一個最簡單的測試程序&#xff0c;但是QtCreator左側構建的三個按鈕呈現灰色&#xff0c;無法進行構建操作答&#xff1a;進入QtCreator的Kits界面&#xff08;工具-選項&#xff09;&#xff0c;點擊"自動檢測"下的De…