工作中如何打造優雅的 Git 工作流和 Commit 規範!

前言

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

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

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

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

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

基本命令操作

我們來看下 git 的基本操作,這些命令基本可以完成我們日常對代碼版本開發合併需求,同時小許在文末給老闆們準備了一份【Git 命令大全】,值得你收藏!

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>

Commit Type 的類別

Commit messages 格式要求

標題行:50 個字符以內,描述主要變更內容

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

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

來看這個這位老哥在 Angular 項目詳細的 commit 信息,大家可以對照上面的規範看,可以用一個詞描述這種好的 Commit 方式【“賞心悅目”】,也許這也就是爲什麼這個項目的 Commit 會成爲衆多人模仿的原因吧!

關於名詞簡稱

軟件團隊中經常需要 Git 進行團隊協作開發,但是不少職場小寶朋友對於從大佬口中冒出來的一些字母縮略詞一臉矇蔽,比如 MR、CR,這裏一次說個明白,讓你不再迷茫各種簡稱,哈哈!

這裏總結了一些,

最全 Git 命令

在文章末尾,分享一下收藏的一個非常全面的 Git 命令總結,分享給大家!工作日愉快各位

參考:字節研發設施下的 Git 工作流

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/LXiqJeYYK6DjLg2LMIp1-Q