Git工作流和Commit規范

Git大家都非常熟悉了,就不做過多介紹,但是如何用好Git、如何進行合理的分支開發、Merge你是否有一個規范流程呢?💤

不論是一個團隊一起開發一個項目,還是自己獨立開發一個項目,都少不了要和Git打交道,這些都是作為開發者必須要掌握的。每個團隊也許有自己的Git工作流,今天小許給你分享一個通用的流程和規范。

既然說到Git得先有個協同原則:

統一使用Git作為版本控制的主要工具。

統一使用GitFlow流程管理控制版本

基本命令操作

git add . :將變更從工作目錄移至暫存區域

git commit -m “fix: xxx” :將暫存區中的文件提交到本地倉庫中分支中

git pull:用于從遠程獲取代碼并合并本地的版本

git push:用于從將本地的分支版本上傳到遠程并合并

這些操作命令在各個工作區、倉庫之間如何進行流轉的呢?如下圖
在這里插入圖片描述
git有好幾個區,工作區(workspace)、暫存區(indexStage)、本地倉庫(local repository)、還有遠程倉庫(remote repository)。

遠程倉庫為我們保存一份代碼,如github,而工作區、暫存區和本地倉庫都在本地

常用分支建議
前面簡單講了下代碼提交流程,但是版本控制并不是簡單代碼提交就完事了,這里分享一些常用的分支開發,但并不是任何項目都一定按照這種分支結構來定義,按你的需求來確定需要哪些。比如你一個人開發一個小型項目,那么就不用搞的那么復雜,如果是多人協同開發版本迭代較快,那么下面的分支內容會讓你開發節奏更清晰合理!
在這里插入圖片描述

生產分支(master)?
master分支是倉庫的主分支,也有人叫production分支,這個分支包含最近發布到生產環境的代碼,最近發布的release, 這個分支只能從其他分支合并,不能在這個分支直接修改?master 分支一般由release、develop以及hotfix分支合并,任何時間都不能直接修改代碼開發分支(develop)?
這個分支是我們的主開發分支,始終保持最新完成以及bug修復后的代碼.包含所有要發布到下一個release的代碼,這個主要合并與其他分支,比如feature分支?一般開發的新功能時,feature分支都是基于develop分支下創建的補丁分支(hotfix)?
當我們在生產環境發現新的Bug時候,我們需要基于master分支創建一個hotfix分支,然后在hotfix分支上修復bug完成hotfix后,我們要把hotfix分支合并回master和develop分支?,所以hotfix的改動會進入下一個release發布分支(release)?
當你需要發布一個新功能的時候,要基于develop分支創建一個release分支在release分支做為基準進行測試并修復bug,完成release后,把release合并到master和develop分支?release 分支為預上線分支,發布提測階段,會release分支代碼為基準提測功能分支(feature)?
feature分支主要是用來開發一個新的功能,一旦開發完成,我們合并回develop分支,然后提交合并請求到 release 分支進行提測。分支命名: feature/ 開頭的為特性分支, 命名規則: feature/user_module、 feature/cart_module

Git工作流
上面那么多種分支類型,而且不同的分支又是基于其他分支,每次看完之后都記得,但是結合起來發現僅僅停留在有印象,是的,我們不好從單純的文字上理清分支之間的關系和合并方式。

沒關系,小許用個圖把之間的關系梳理清楚:
在這里插入圖片描述
其實核心是要弄明白主干和各個開發分支的關系,以及你的開發分支該和誰去合并。

不過還是那句話根據自己的項目和業務團隊去指定Git工作,不能為了更風去創建并不適合團隊的分支,不然會導致開發在無聊的敲命令,花費時間在各種分支的合并上,反而降低了效率。

適合別人的未必適合大家,互相交流,選擇合適自己的!

更多方位的流程,大家可以看看這篇文章# 字節研發設施下的 Git 工作流

Commit編寫規范
好的Commit messages 日志編寫會帶來極大的幫助,它也反映了一個開發人員是否是良好的協作者,更重要的是在后續修復bug和實現新的feture時,對于之前實現的功能、解決的bug可以一目了然,而不用通過閱讀代碼去了解曾經的實現,因為這會是意見非常痛苦的事情!

忘了說,你的Commit messages會是Code Review人員參考基本,你應該不想被無情的打回吧?😅😅😅

目前,社區有多種 Commit messages 的寫法規范。來自Angular (前端框架)規范是目前使用最廣的寫法,比較合理和系統化。

其實瀏覽過Github開源項目的同學,如果有注意Pull requests的話就有了解,行我我們看下Angular的提交規范到底是咋樣的,為啥會成為參考標桿🚩🚩🚩。
在這里插入圖片描述
Commit messages提交可以參照以下格式

<type>: <subject>
<BLANK LINE> 空白行
<body>
<BLANK LINE> 空白行
<footer>
? type: 本次 commit 的類型,諸如 bugfix docs style 等? scope: 本次 commit 波及的范圍

? subject: 簡明扼要的闡述下本次 commit 的主旨,在原文中特意強調了幾點 : . 使用祈使句,是不是很熟悉又陌生的一個詞,來傳送門在此 祈使句 . 首字母不要大寫 . 結尾無需添加標點

? body: 同樣使用祈使句,在主體內容中我們需要把本次 commit 詳細的描述一下,比如此次變更的動機,如需換行,則使用 |

? footer: 描述下與之關聯的 issue 或 break change

Commit Type的類別
? feat: 添加新特性

? fix: 修復bug

? docs: 僅僅修改了文檔

? style: 僅僅修改了空格、格式縮進、都好等等,不改變代碼邏輯

? refactor: 代碼重構,沒有加新功能或者修復bug

? perf: 增加代碼進行性能測試

? test: 增加測試用例

? chore: 改變構建流程、或者增加依賴庫、工具等

Commit messages格式要求
標題行:50個字符以內,描述主要變更內容

主體內容:更詳細的說明文本,建議72個字符以內。 需要描述的信息包括:

? 為什么這個變更是必須的? 它可能是用來修復一個bug,增加一個feature,提升性能、可靠性、穩定性等等

? 他如何解決這個問題? 具體描述解決問題的步驟

? 是否存在副作用、風險?

如果需要的化可以添加一個鏈接到issue地址或者其它文檔

來看這個這位老哥在Angular項目詳細的commit信息,大家可以對照上面的規范看,可以用一個詞描述這種好的Commit方式【“賞心悅目”】,也許這也就是為什么這個項目的Commit會成為眾多人模仿的原因吧!
在這里插入圖片描述
關于名詞簡稱
軟件團隊中經常需要Git進行團隊協作開發,但是不少職場小寶朋友對于從大佬口中冒出來的一些字母縮略詞一臉蒙蔽,比如MR、CR,這里一次說個明白,讓你不再迷茫各種簡稱,哈哈!

這里總結了一些,

? CR:Code Review. 請求代碼審查。

? PR: pull request. 拉取請求,給其他項目提交代碼。

? MR: merge request. 合并請求

? ACK:Acknowledgement. 承認,同意。表示接受代碼的改動。

? TL;DR:Too Long; Didn’t Read. 太長懶得看。常見于README文檔。

? WIP:Work In Progress. 進展中,主要針對改動較多的 PR,可以先提交部分,標題或 Tag 加上 WIP,表示尚未完成,這樣別人可以先 review 已提交的部分。

? RFC:Request For Comment. 請求進行討論,表示認為某個想法很好,邀請大家一起討論一下

Git命令
在文章末尾,分享一下收藏的一個非常全面的Git命令總結,分享給大家!
在這里插入圖片描述

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

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

相關文章

【NGINX--5】身份驗證

1、HTTP 基本身份驗證 需要通過 HTTP 基本身份驗證保護應用或內容。 生成以下格式的文件&#xff0c;其中的密碼使用某個受支持的格式進行了加密或哈希處理&#xff1a; # comment name1:password1 name2:password2:comment name3:password3第一個字段是用戶名&#xff0…

紫光展銳V8821榮獲“中國芯”重大創新突破產品獎

近日&#xff0c;“中國芯”優秀產品評選落下帷幕&#xff0c;紫光展銳首顆5G IoT-NTN衛星通信SoC芯片V8821憑借在衛星通信前沿領域的技術創新&#xff0c;從285家芯片企業、398款芯片產品中脫穎而出&#xff0c;榮獲第十八屆“中國芯”年度重大創新突破產品獎。 “中國芯”優…

ReentrantLock源碼解析

ReentrantLock源碼解析 文章目錄 ReentrantLock源碼解析一、ReentrantLock二、ReentrantLock 的 Sync、FairSync、NonfairSync2.1 Sync、FairSync、NonfairSync2.2 NonfairSync 下的 tryAcquire2.3 FairSync下的 tryAcquire2.4 tryRelease 三、lock.lock()3.1 NonfairSync.lock…

優橙內推青海專場——5G網絡優化(中高級)工程師

可加入就業QQ群&#xff1a;801549240 聯系老師內推簡歷投遞郵箱&#xff1a;hrictyc.com 內推公司1&#xff1a;浙江明訊網絡技術有限公司 內推公司2&#xff1a;南京華蘇科技有限公司 內推公司3&#xff1a;杭州華星創業通信技術有限公司 浙江明訊網絡技術有限公司 浙江明…

4.常見面試題--操作系統

特點&#xff1a;并發性、共享性、虛擬性、異步性。 Windows 和 Linux 內核差異 對于內核的架構?般有這三種類型&#xff1a; ● 宏內核&#xff0c;包含多個模塊&#xff0c;整個內核像?個完整的程序&#xff1b; ● 微內核&#xff0c;有?個最?版本的內核&#xff0…

名字大卻不中用的AI大模型,名不副實

這兩天 OpenAI 團隊&#xff08; ChatGPT 公司&#xff09;的戲比較多&#xff0c;兩三天的功夫&#xff0c;劇情發展都超出了 OpenAI 首席科學家的預期&#xff0c;目前來看&#xff0c;微軟還是最大的贏家。這是個引子&#xff0c;這個話題&#xff0c;網絡上早已傳爛了&…

云安全之盾:ZStack 云主機安全防護解決方案全方位保護云環境

隨著云計算的蓬勃發展&#xff0c;網絡威脅愈發復雜&#xff0c;涵蓋了從勒索病毒到APT攻擊的各種威脅類型。在這一風云變幻的網絡安全環境下&#xff0c;云主機安全不再僅僅是一個選項&#xff0c;它是信息系統安全的核心要素。云軸科技ZStack 云主機安全防護解決方案是為了滿…

6.3.WebRTC中的SDP類的結構

在上節課中呢&#xff0c;我向你介紹了sdp協議&#xff0c; 那這節課呢&#xff0c;我們再來看看web rtc中。是如何存儲sdp的&#xff1f;也就是sdp的類結構&#xff0c;那在此之前呢&#xff1f;我們先對sdp的內容啊&#xff0c;做一下分類。因為在上節課中呢&#xff0c;雖然…

Python+jieba+wordcloud實現文本分詞、詞頻統計、條形圖繪制及不同主題的詞云圖繪制

目錄 序言&#xff1a;第三方庫及所需材料函數模塊介紹分詞詞頻統計條形圖繪制詞云繪制主函數 效果預覽全部代碼 序言&#xff1a;第三方庫及所需材料 編程語言&#xff1a;Python3.9。 編程環境&#xff1a;Anaconda3&#xff0c;Spyder5。 使用到的主要第三方庫&#xff1a;…

python之pyqt專欄1-環境搭建

#python pyqt# python&#xff1a;3.11.6 pycharm&#xff1a;PyCharm Community Edition 2023.2.5 pyqt6 python安裝 官網下載&#xff1a;Python Releases for Windows | Python.org pycharm社區版安裝 官網地址&#xff1a;Download PyCharm: Python IDE for Professional…

golang學習筆記——創建項目

創建項目 從Go 1.8開始&#xff0c;將GOPATH設置為環境變量不是必需的。如果我們沒有設置一個&#xff0c;Go使用默認的GOPATH為$HOME/go。可以使用go env查看環境變量信息。 創建項目 # 創建項目目錄 mkdir helloLog cd helloLog # 使用go mod初始化項目,生成go.mod文件 go…

TikTok shop印尼重啟電商征程:與當地平臺合作開啟新篇章!——站斧瀏覽器

經歷了一個半月的間隔&#xff0c;TikTok Shop成功重返印度尼西亞市場。據國際媒體報道&#xff0c;TikTok計劃通過與印尼本地電子商務平臺的合作&#xff0c;重啟其在該國的電商業務。 Temmy Satya Permana&#xff0c;印尼合作社和中小企業部的官員&#xff0c;證實了這一重…

【廣州華銳互動】VR線上課件制作軟件滿足數字化教學需求

隨著科技的不斷發展&#xff0c;虛擬現實&#xff08;VR&#xff09;技術在教學領域的應用逐漸成為趨勢。其中&#xff0c;廣州華銳互動開發的VR線上課件制作軟件更是備受關注。這種工具為教師提供了便捷的制作VR課件的手段&#xff0c;使得VR教學成為可能&#xff0c;極大地豐…

thinkphp6 不支持:redis錯誤

起因&#xff1a; 使用 redis 時候&#xff0c;thinkphp 報錯。 解決方法&#xff1a; 打開 php.ini 文件&#xff0c;增加 extensionphp_redis.dll 即可

Java架構師發展方向和歷程

目錄 1 導論2 架構師的三觀培養3 架構師的遇到的困難4 架構師職責5 架構師之路6 架構師的發展方向7 應用領域架構師8 業務架構師9 系統架構師和企業架構師10 技術路線和演進規劃11 一線大廠的技術生態拓張案例12 如何推進項目落地想學習架構師構建流程請跳轉:Java架構師系統架…

CUDA與GPU編程

文章目錄 CUDA與GPU編程1. 并行處理與GPU體系架構1.1 并行處理簡介1.1.1 串行處理與并行處理的區別1.1.2 并行處理的概念1.1.3 常見的并行處理 1.2 GPU并行處理1.2.1 GPU與CPU并行處理的異同1.2.2 CPU的優化方式1.2.3 GPU的特點 1.3 環境搭建 CUDA與GPU編程 1. 并行處理與GPU體…

城市管理實景三維:打造智慧城市的新引擎

城市管理實景三維&#xff1a;打造智慧城市的新引擎 在城市管理領域&#xff0c;實景三維技術正逐漸成為推動城市發展的新引擎。通過以精準的數字模型呈現城市真實場景&#xff0c;實景三維技術為城市決策提供了全新的思路和工具。從規劃設計到交通管理&#xff0c;從環境保護到…

嵌入式系統在工業自動化中的應用

嵌入式系統在工業自動化中的應用非常廣泛&#xff0c;它們通過集成控制和實時響應能力&#xff0c;實現了生產線的自動化、智能化和高效化。以下將詳細介紹嵌入式系統在工業自動化中的幾個重要應用領域&#xff0c;并提供一些示例代碼。 1. PLC&#xff08;可編程邏輯控制器&a…

【開源】基于Vue和SpringBoot的學校熱點新聞推送系統

項目編號&#xff1a; S 047 &#xff0c;文末獲取源碼。 \color{red}{項目編號&#xff1a;S047&#xff0c;文末獲取源碼。} 項目編號&#xff1a;S047&#xff0c;文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 新聞類型模塊2.2 新聞檔案模塊2.3 新…

Python模塊之yaml:簡化配置與數據解析

更多Python學習內容&#xff1a;ipengtao.com YAML&#xff08;YAML Aint Markup Language&#xff09;是一種人類可讀的數據序列化格式&#xff0c;常用于配置文件和數據傳輸。在Python中&#xff0c;可以使用PyYAML模塊來處理YAML格式的數據。本文將深入介紹PyYAML的基礎用法…