Git提交規范及最佳實踐

Git 提交規范通常是為了提高代碼提交的可讀性、可維護性和自動化效率(如生成 ChangeLog)。以下是常見的?Conventional Commits?規范,結合社區最佳實踐總結而成:


1. 提交格式

每次提交的?commit message?應包含三部分:HeaderBody?和?Footer,格式如下:

復制

<type>(<scope>): <subject>
<空行>
<body>
<空行>
<footer>
  • Header(必填):描述提交類型和簡短說明。

  • Body(可選):詳細說明修改內容(如動機、實現細節)。

  • Footer(可選):關聯 Issue、描述破壞性變更(BREAKING CHANGE)等。


2. 提交類型(Type)

類型說明
feat新增功能(feature)
fix修復 Bug
docs文檔更新(如 README、注釋)
style代碼樣式調整(如空格、格式化,不改變邏輯)
refactor代碼重構(既不修復 Bug 也不新增功能)
perf性能優化
test添加或修改測試用例
chore構建過程或輔助工具的變動(如依賴更新、CI 配置)
revert回滾之前的提交
build構建相關的修改(如打包工具、依賴庫版本升級)
ciCI/CD 配置或腳本的修改

3. 規范細則

Header
  • <type>:必填,從上述類型中選擇。

  • <scope>:可選,描述影響范圍(如模塊名、功能名),例如?feat(user)

  • <subject>:簡明描述修改內容:

    • 使用祈使句(如 "Add" 而非 "Added" 或 "Adds")。

    • 首字母小寫,結尾不加標點。

    • 長度建議不超過?50 字符

Body
  • 描述為什么修改如何修改,以及與之前行為的對比

  • 每行不超過?72 字符,避免自動換行問題。

Footer
  • 關聯 Issue:如?Closes #123?或?Fixes #456

  • 破壞性變更:以?BREAKING CHANGE:?開頭,描述不兼容的改動。


4. 提交示例

plaintext

復制

feat(auth): add OAuth2 login support- Integrate Google OAuth2 API
- Add login button componentCloses #123
BREAKING CHANGE: Remove deprecated login API endpoints.

plaintext

復制

fix(api): handle null response in user endpointWhen the user data is missing, return 404 instead of 500.Fixes #456

5. 工具支持

  • commitlint:校驗提交信息是否符合規范。

  • husky:通過 Git 鉤子自動觸發校驗。

  • standard-version:基于提交記錄自動生成版本號和 ChangeLog。


6. 分支命名建議

  • 功能分支feature/描述性名稱(如?feature/user-login

  • Bug 分支fix/問題描述(如?fix/login-error

  • 熱修復分支hotfix/問題描述


通過規范化的提交信息,可以:

  1. 提升代碼審查效率。

  2. 自動化生成版本日志(ChangeLog)。

  3. 方便追蹤代碼變更歷史。

  4. 支持語義化版本號(Semantic Versioning)。

以下是一些符合中文 Git 提交規范的示例,涵蓋不同場景:


示例 1:新增功能(feat

plaintext

復制

feat(訂單): 新增支持支付寶支付方式- 添加支付寶 SDK 集成
- 創建支付結果回調處理邏輯
- 更新訂單狀態流轉文檔Closes #45

示例 2:修復 Bug(fix

plaintext

復制

fix(登錄): 修復手機號驗證碼重復發送問題當用戶頻繁點擊發送驗證碼按鈕時,后端未正確校驗時間間隔,
導致同一用戶 1 秒內可發送多次請求。現已添加 60 秒冷卻時間限制。Fixes #78

示例 3:文檔更新(docs

plaintext

復制

docs(API): 更新用戶模塊接口文檔- 補充 getUserInfo 接口的權限說明
- 修正 createUser 的請求體示例格式

示例 4:代碼重構(refactor

plaintext

復制

refactor(購物車): 解耦商品價格計算邏輯將價格計算從 ShoppingCartService 移至獨立的 PriceCalculator 類,
提高代碼可測試性和可維護性。

示例 5:破壞性變更(BREAKING CHANGE

plaintext

復制

feat(配置): 重構環境變量加載方式- 廢棄舊版 .env 文件格式
- 改用 YAML 格式配置文件BREAKING CHANGE: 必須將原有 .env 文件遷移至 config.yaml
Closes #112

示例 6:簡單提交(無 Body/Footer)

plaintext

復制

style: 調整首頁按鈕間距

示例 7:性能優化(perf

plaintext

復制

perf(圖片加載): 啟用 WebP 格式壓縮- 通過 CDN 自動轉換圖片為 WebP 格式
- 平均圖片體積減少 65%

示例 8:回滾提交(revert

plaintext

復制

revert: 撤銷 "feat: 實驗性分頁功能"該功能導致列表渲染性能下降超過 200ms,
需重新設計實現方案。This reverts commit 9a7b2d1c.

示例 9:測試相關(test

plaintext

復制

test(用戶服務): 添加登錄失敗用例- 覆蓋密碼錯誤、賬號鎖定等場景
- 使用 Jest 模擬 Redis 服務

示例 10:構建工具(build

plaintext

復制

build: 升級 Webpack 至 5.75 版本- 修復 tree-shaking 對 lodash 的兼容性問題
- 優化構建產物哈希生成策略

關鍵要點

  1. 動詞使用:描述時用 "新增/修復/優化/調整" 等祈使動詞
    ? 錯誤:"修復了XXX問題" → ? 正確:"修復XXX問題"

  2. 長度控制

    • Header 簡明扼要(50 字內)

    • Body 每行不超過 72 字符

  3. 關聯問題:明確標注關閉的 Issue(如?Closes #123

  4. 破壞性變更:必須用?BREAKING CHANGE:?顯式聲明

實際使用中可根據團隊需求調整規范細節,建議配合?Commitizen?工具實現交互式提交引導。

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

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

相關文章

Ubuntu中snap

通過Snap可以安裝眾多的軟件包。需要注意的是&#xff0c;snap是一種全新的軟件包管理方式&#xff0c;它類似一個容器擁有一個應用程序所有的文件和庫&#xff0c;各個應用程序之間完全獨立。所以使用snap包的好處就是它解決了應用程序之間的依賴問題&#xff0c;使應用程序之…

android studio 運行java main報錯

運行某個帶main函數的java文件報錯 Could not create task :app:Test.main(). > SourceSet with name main not found. 解決辦法&#xff1a;在工程的.idea/gradle.xml 文件下添加&#xff1a; <option name"delegatedBuild" value"false" /&g…

openssh離線一鍵升級腳本分享(含安裝包)

查看當前的版本 [rootmyoracle ~]#ssh -V相關安裝包下載地址 openssh下載地址&#xff1a;http://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssl下載地址&#xff1a;https://www.openssl.org/source/zlib下載地址&#xff1a;http://www.zlib.net/今天演示從7.4升級…

Mac M1管理多個Node.js版本

目錄 1. 使用 nvm (Node Version Manager) 1.1.安裝 nvm 1.2.安裝Node.js版本 1.3.查看已安裝的node版本列表 1.4.使用特定版本的Node.js 1.5.查看當前使用的版本 2. 使用 fnm (Fast Node Manager) 2.1.安裝 fnm 2.2.安裝Node.js版本 2.3.查看已安裝的版本 2.4.使用…

Unity中國戰略調整簡訊:Unity6下架 團結引擎接棒

Unity中國戰略調整簡訊&#xff1a;Unity6下架 團結引擎接棒 免費版 2025年4月9日 —— Unity中國宣布自即日起&#xff0c;中國大陸及港澳地區停止提供Unity 6及后續版本下載與服務&#xff0c;相關功能由國產引擎“團結引擎”承接。國際版2022 LTS及更早版本仍由Unity中國維護…

TestNG 單元測試詳解

1、測試環境 jdk1.8.0 121 myeclipse-10.0-offline-installer-windows.exe TestNG 插件 org.testng.eclipse 6.8.6.20130607 0745 2、介紹 套件(suite):由一個 XML 文件表示,通過<suite>標簽定義,包含一個或更多測試(test)。測試(test):由<test>定義&#xf…

C復習(主要復習)

指針和數組 指針數組是一個數組&#xff0c;數組的每個元素都是指針。它適用于需要存儲多個指針的場景&#xff0c;如字符串數組。數組指針是一個指針&#xff0c;指向一個數組。它適用于需要傳遞整個數組給函數或處理多維數組的場景。 函數指針&#xff1a;函數指針的定義需要…

探索大語言模型(LLM):定義、發展、構建與應用

文章目錄 引言大規模語言模型的基本概念大規模語言模型的發展歷程1. 基礎模型階段&#xff08;2018年至2021年&#xff09;2. 能力探索階段&#xff08;2019年至2022年&#xff09;3. 突破發展階段&#xff08;以2022年11月ChatGPT的發布為起點&#xff09; 大規模語言模型的構…

5. k8s 之 pod原理與使用

Kubernetes Pod 原理詳解 1. Pod 的部署方式 Pod 是 Kubernetes 的最小調度單元&#xff0c;其部署方式分為 聲明式&#xff08;YAML&#xff09; 和 命令式&#xff08;kubectl&#xff09; 兩種&#xff1a; (1) 聲明式部署&#xff08;推薦&#xff09; 通過 YAML 文件定…

使用PyTorch實現目標檢測邊界框轉換與可視化

一、引言 在目標檢測任務中&#xff0c;邊界框&#xff08;Bounding Box&#xff09;的坐標表示與轉換是核心基礎操作。本文將演示如何&#xff1a; 實現邊界框的兩種表示形式&#xff08;角點坐標 vs 中心坐標&#xff09;之間的轉換 使用Matplotlib在圖像上可視化邊界框 驗…

電影推薦及數據分析可視化系統(Python+Echarts+Mysql+Flask框架)

提升自己&#xff0c;掌握數據分析的能力&#xff0c;最快的方式就是實踐&#xff01; 下面是對本項目的一些功能展示、介紹以及部分核心代碼的展示,附項目系統展示的視頻,制作不易如需完整代碼后臺私信我有償獲取! 一 、系統分析及功能介紹 1.系統分析 系統采用Python作為開發…

Android Jetpack Compose 高級開發核心技術

Android Compose 高級技術總結 1. 性能優化 1.1 狀態管理優化 狀態提升原則&#xff1a;將狀態提升到共享的最近共同父組件derivedStateOf&#xff1a;當需要基于多個狀態計算派生狀態時使用 val scrollState rememberScrollState() val showButton by remember {derivedS…

Java堆結構深度解析:原理、實現與應用全指南

一、堆的核心概念體系 1. 堆的定義與性質 graph TBROOT((最大堆)) --> A[父節點 ≥ 子節點]ROOT --> B[完全二叉樹結構]ROOT --> C[數組存儲]ROOT --> D[快速獲取極值] 2. 堆類型對比 類型特性典型應用場景最大堆父節點值 ≥ 子節點值獲取前K大元素最小堆父節點…

SpringMVC學習(請求與響應。常見參數類型接收與響應。@RequestParam、@RequestBody的使用)(詳細示例)

目錄 一、請求與響應。(RequestMapping) &#xff08;1&#xff09;使用注解RequestMapping對業務模塊區分。 StudentController。 TeacherController。 &#xff08;2&#xff09;Apifox請求與響應。 "/student/login"。 "/teacher/login"。 二、常見參數…

回溯算法+對稱剪枝——從八皇后問題到數獨問題(二)

引入&#xff1a; 本節我們進一步完善八皇后問題&#xff0c;學習剪枝、八皇后殘局問題 進一步領會邏輯編程的概念&#xff0c;深入體會回溯算法&#xff0c;回顧上一節提到的啟發搜索策略。 回顧&#xff1a; 八皇后問題&#xff1a;我們需要在一個空棋盤上放置 n 個皇后&a…

【玩泰山派】MISC(雜項)- 使用vscode遠程連接泰山派進行開發

文章目錄 前言流程1、安裝、啟動sshd2、配置一下允許root登錄3、vscode中配置1、安裝remote插件2、登錄 **注意** 前言 有時候要在開發板中寫一寫代碼&#xff0c;直接在終端中使用vim這種工具有時候也不是很方便。這里準備使用vscode去通過ssh遠程連接泰山派去操作&#xff0…

【VsCode】設置文件自動保存

目錄 一、前言 二、操作步驟 一、前言 VSCode中開啟自動保存功能可以通過訪問設置、修改settings.json文件、使用自動保存延遲功能來實現。這些方法能有效提升編程效率、避免數據丟失、實時同步更改。 二、操作步驟 在 Visual Studio Code (VS Code) 中設置自動保存功能非…

Adobe After Effects的插件--------Optical Flares之Options概述

Optical Flares插件的Options是對整個效果的組裝和設置。點擊該按鈕會彈出一個組裝室彈窗。 Options組裝室就是對每個【鏡頭對象】進行加工處理,再將其組裝在一起,拼湊成完整的光效。 接下來是我對組裝室的探索: 面板 面板中有預覽、堆棧、編輯和瀏覽按鈕,其作用是調節窗…

如何用 esProc 補充數據庫 SQL 的缺失能力

某些數據庫 SQL 缺失必要的能力&#xff0c;通常要編寫大段的代碼&#xff0c;才能間接實現類似的功能&#xff0c;有些情況甚至要改用存儲過程&#xff0c;連結構都變了。常見的比如&#xff1a;生成時間序列、保持分組子集、動態行列轉換、自然序號、相對位置、按序列和集合生…

迷你世界腳本腳本常見問題

腳本常見問題 彼得兔 更新時間: 2024-05-22 17:54:44 在查閱開發者學院中的腳本API時&#xff0c;若有任何問題或建議&#xff0c;歡迎通過問卷進行反饋&#xff01;【點我填寫問卷】 1.Block中的data在什么地方使用 data使用有具體需求,此處不建議開發者使用。開發者盡可能使…