帶領前端小夥伴重溫「Git Flow Workflow」

前言

關於Git Flow 工做流,我想已是老生常談的話題了,可是今天我不得不來重溫一下 Git Flow 工做流。當我看的代碼廠庫的時候,我已經開始懷疑人生。亂七八糟的分支,五花八門的提交信息,各類各樣的分支名稱,沒有 Develop 分支,沒有 Release,也沒有 Hotfix。所以我想我應該好好溫習一遍 Git Flow 工做流,來改善一下廠庫現狀。前端

0. Git 工做流

其實 Git 不僅有 Git Flow Workflow 這一種工做流,還有 Fork WorkflowFeature Branch WorkflowDistributed Workflows 等。如今還有 Github Flow WorkflowGitlab Flow Workflowgit

1. Git Flow Workflow

Vincent Driessen 2010 年發佈出來的他本身的分支管理模型。我的以爲 Git Flow Workflow 應該是最經常使用的 Git 工做流了,更多的介紹你們能夠看看這個 Git Flow Workflow (看完這一篇感受就不用再往下面看我寫的這篇了,由於你已經重溫了,嘿嘿)。bash

2. Git Flow 長期分支

  • master
  • develop

master:主分支,這個你們應該不陌生。代碼庫應該有一個、且僅有一個主分支;提供用戶正式使用的版本,都在這個主分支上發佈。
develop:開發分支,平常使用的開發分支。從 master 分支上面分出來的,通常功能開發完成後合併到主分支,而且用主分支進行發佈。工具

# 建立 develop 分支
git checkout -b develop master

# 切換到 master 分支
git checkout master

# 對 develop 分支進行合併(使用 --no-ff 能夠在 git 歷史上清晰看見記錄)
git merge --no-ff develop

3. Git Flow 短時間分支

  • feature
  • hotfix
  • release
    feature:功能分支。也就是你們作需求、功能的時候的分支。從 develop 分支上面分出來的,通常功能完成後合併到 develop 分支,而且刪除功能分支。命名方式通常爲 feature/*feature-*
# 建立 feature/x 功能分支
git checkout -b feature/x develop

# 切換 develop 分支
git checkout develop

# 開發完成後,將功能分支 feature/x 合併到 develop 分支(使用 --no-ff 能夠在 git 歷史上清晰看見記錄)
git merge --no-ff feature/x

# 合併完成刪除 feature/x 功能分支
git branch -d feature/x


hotfix:修補 bug 分支/補丁分支。bug 這種東西你們都不陌生,hotfix 就是用來修補正式發佈之後的 bug 的分支。從 master 分支上面分出來的,通常修復完成後合併到主分支以及開發分支,而且刪除補丁分支,用主分支進行發佈。命名方式通常爲 hotfix/*hotfix-*post

# 建立 hotfix/x 補丁分支
git checkout -b hotfix/x master

# 切換到 master 分支
git checkout master

# 修復完成後,將 hotfix/x 補丁分支合併到 master 分支(使用 --no-ff 能夠在 git 歷史上清晰看見記錄)
git merge --no-ff hotfix/x

# 切換到 develop 分支
git checkout develop

# 將 hotfix/x 補丁分支合併到 master 分支
git merge --no-ff hotfix/x

# 對合並生成的新節點,作一個標籤(後面重溫 tag)
git tag -a 1.1

# 合併完成刪除 hotfix/x 補丁分支
git branch -d hotfix/x

release:預發佈分支。發佈正式版本以前(開發完成 develop 分支合併到 master 分支以前),可能須要有一個預發佈的版本進行測試。從 develop 分支上面分出來的,預發佈結束之後,必須合併進 developmaster 分支。命名方式通常爲 release/*release-*測試

# 建立 release/x 補丁分支
git checkout -b release/x develop

# 確認沒問題後,切換到 master 分支
git checkout master

# 修復完成後,將 release/x 補丁分支合併到 master 分支(使用 --no-ff 能夠在 git 歷史上清晰看見記錄)
git merge --no-ff release/x

# 切換到 develop 分支
git checkout develop

# 將 hotfix/x 補丁分支合併到 master 分支
git merge --no-ff release/x

# 對合並生成的新節點,作一個標籤(後面重溫 tag)
git tag -a 1.2

# 合併完成刪除 release/x 功能分支
git branch -d release/x

4. 關於 Tag

taggit 版本庫的一個標記,指向某個 commit 的指針。主要用於發佈版本的管理,一個版本發佈以後,咱們能夠爲 git打上 v.1.0.1v.1.0.2 ...這樣的標籤。版本代碼被打上 tag 後就會被封存起來,之後就能夠根據相應的 tag 找到對應的版本,防止版本代碼丟失。spa

# 打一個 tag
git tag v1.0.1

我想你們看到這裏,不只把 Git Flow 重溫了一遍,一些基礎的 Git 命令也重溫了一遍。3d

5. Git 提交信息規範

這個其實也是須要你們注意的,寫好 Git 提交信息並不難,就看你們是否是想去養成這麼一個習慣。
格式:指針

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

Header(必需):包括三個字段:type(必需)、scope(可選)和 subject(必需)。code

  type:用於說明 commit 的類別,只容許使用下面7個標識。

     feat:新功能(feature)

     fix:修補bug

     docs:文檔(documentation)

     style: 格式(不影響代碼運行的變更)

     refactor:重構(即不是新增功能,也不是修改bug的代碼變更)

     test:增長測試

     chore:構建過程或輔助工具的變更

  scope:用於說明 commit 影響的範圍,好比數據層、控制層、視圖層等等,視項目不一樣而不一樣。

  subject:用於 commit 目的的簡短描述,不超過50個字符。

Body(可選):對本次 commit 的詳細描述,能夠分紅多行。
示例:

More detailed explanatory text, if necessary.  Wrap it to
about 72 characters or so.

Further paragraphs come after blank lines.

- Bullet points are okay, too
- Use a hanging indent

注意:

  • 使用第一人稱如今時,好比使用change而不是changed或changes。
  • 永遠別忘了第2行是空行。
  • 應該說明代碼變更的動機,以及與之前行爲的對比。

Footer(可選):
  1. 若是當前代碼與上一個版本不兼容,則 Footer 部分以 BREAKING CHANGE 開頭,後面是對變更的描述、以及變更理由和遷移方法。
  2. 若是當前 commit 針對某個 issue,那麼能夠在 Footer 部分關閉這個 issue
  3. 若是當前 commit 用於撤銷之前的 commit,則必須以revert:開頭,後面跟着被撤銷 Commit 的 Header。

狀況一(示例):

BREAKING CHANGE: isolate scope bindings definition has changed.

    To migrate the code follow the example below:

    Before:

    scope: {
      myAttr: 'attribute',
    }

    After:

    scope: {
      myAttr: '@',
    }

    The removed `inject` wasn't generaly useful for directives so there should be no code using it.

狀況二(示例):

Closes #234

狀況三(示例):

revert: feat(pencil): add 'graphiteWidth' option

This reverts commit 667ecc1654a317a13331b17617d973392f415f02.

# Body部分的格式是固定的,必須寫成This reverts commit &lt;hash>.,其中的hash是被撤銷 commit 的 SHA 標識符。

6. 拒絕拖延(感謝關注)

公衆號:前端曰

公衆號ID:js-say

ps:是(yue)不是(ri)

相關文章
相關標籤/搜索