天天看點

git 常用分支操作

每個公司都有自己的一套git操作模式,但git的各種規範都是相同,下面總結了下常用開發規範操作

分支命名

master

 - 主幹(預設)

一般master位于線上正式伺服器的版本,每一次在 

master

 上的送出或合并都應該伴随着版本号的變更。(這樣會更好的記錄和版本回退)

master 分支應保證是随時可釋出的(可能包含Bug),每個釋出的版本應打上 tag,便于復原。對于有重大 Bug 的版本,應備注,避免復原到錯誤的版本。

  • feature/*

     - 特性分支

    Example: feature/this-is-a-feature-name,名稱中間通過 

    -

     分割。

    該分支建立自 

    master

     分支,充分測試後,合并到 

    master

     分支

    開發人員使用的分支,針對每一個功能點 

    issue

     建立一個 

    feature

    ,一般命名規範為 

    feature/<issue_number>-<feature_name>

    ,該 

    feature

     下的每次送出格式為 

    #<issue_number> <description>

    ,當 

    feature

     開發完畢後 

    merge

     到 

    develop

    ,并關閉 

    issue

    實際開發中,可能有些 

    feature

     算不上什麼功能上的需求,不太必要有 

    issue

    ,是以命名時可以沒有 

    <issue_number>

    實際開發中,每個新特征功能都應該進行獨立的測試,是以可能需要釋出到測試環境中供測試人員進行測試。目前開發流程不友善部署 

    feature

     分支,是以目前不進行

    feature

     的獨立測試。
  • develop

     - 測試分支

    該分支建立自 

    master

     分支,定期與 

    master

     分支同步,

    featrue

     分支 在本 

    merge

     到 

    develop

     後 

    push

     到 

    github

     進行測試。

    測試服運作此分支代碼,作為開發環境中的主分支使用,任務是收集各個 

    feature

     分支。

    合并到 

    develop

     分支的代碼必須是已經完成開發并在本地進行過充分測試的 

    feature

    ,即 

    能夠交給測試人員測試的版本

    因該分支上可能包含多個 

    feature

    ,且 多個 

    feature

     可能處于不同階段,是以該分支一般不合并的到 

    master

  • release/*

     - 預釋出版本

    預釋出版本,當 

    develop

     收集夠了做一次版本釋出所需的代碼,就 

    checkout -b

     出一個 

    release

     分支,作為上線前的最後測試,除了 

    bugfix

     外不接受任何送出。确認釋出後分别 

    merge

     到 

    master

     和 

    develop

    如果能夠明确定義版本,且明确定義 某版本包含哪些功能的情況下,可在 某版本 定義的功能全部開發完畢之後,建立 

    release

     分支,進行 

    master + release

     灰階部署。
  • hotfix/*

    緊急修複分支,當 

    master

     上出現 

    bug

     需要修複時,基于 

    master

     建立 

    hotfix

     分支,修複完成後分别 

    merge

     到 

    master

     和 

    develop

    開發分支中可能存在Bug,直接修改就可以了,無須建立分支修複Bug,是以,

    hotfix/*

     隻針對釋出的版本。

标簽命名

  • 語義化版本 2.0.0
  • 軟體版本周期
  • 版本格式:主版本号.次版本号.修訂号,版本号遞增規則如下:
  • 主版本号:當你做了不相容的 API 修改,通常是進行了大規模的重新設計,重新定義了 API。
  • 次版本号:當你做了向下相容的功能性新增,通常對應釋出了 

    feature/*

  • 修訂号:當你做了向下相容的問題修正。通常對應釋出了 

    hotfix/*

  • 先行版本号及版本編譯資訊可以加到“主版本号.次版本号.修訂号”的後面,作為延伸。

    Example:

    Commit

    Format
    <type>[(<scope>)]: <subject>
    // 空一行
    [<body>]
               
    Format with GitEmoji
    :emoji1: :emoji2: 不超過 50 個字的摘要,首字母大寫,使用祈使語氣,句末不要加句号
    
    送出資訊主體
    
    引用相關 issue 或 PR 編号 <#110>
               
    # Ref https://github.com/thoughtbot/dotfiles/blob/master/gitmessage
    #
    # 50-character subject line
    #
    # 72-character wrapped longer description. This should answer:
    #
    # * Why was this change necessary?
    # * How does it address the problem?
    # * Are there any side effects?
    #
    # Include a link to the ticket, if any.
    #
    # Add co-authors if you worked on this code with others:
    #
    # Co-authored-by: Full Name <[email protected]>
    # Co-authored-by: Full Name <[email protected]>
               
  • type:
    • feat - 新功能
    • fix - 修複bug
    • br - 此項特别針對bug号,用于向測試回報bug清單的bug修改情況
    • test - 測試
    • docs - 文檔()
    • style - 格式(不影響代碼運作的變動)
    • refactor - 重構(即不是新增功能,也不是修改bug的代碼變動)
    • chore - 建構過程或輔助工具的變動
    • revert - 執行了 

      git-revert

  • scope

    scope用于說明 commit 影響的範圍,比如資料層、控制層、視圖層等等,視項目不同而不同。

  • Develop -> Deploy

  • 建立分支

    git checkout feature/xxx

    注意:

    feature/xxx

     應基于 

    master

    ,是以 此時指令應在 

    master

     分支上進行
  • 修改

    git add

    git commit

  • 推送到遠端

    git push

  • 同步 

    develop

     分支,自動部署 

    develop

     分支部署到 

    demo

     伺服器

    git branch -f develop feature/xxx

    git push -f origin develop

    自定義快捷指令,放到 

    ~/.bashrc

    ~/.zshrc

     中即可
    function gitdd () {
    	echo 'deploy current branch to demo'
    	git branch -f develop HEAD 
    	git push -f origin develop
    }
               
    usage:
    gitdd
               
    以上指令在目前分支 

    feature/xxx

     下進行,不需要切換分支
  • Pull Request

    請求将 

    feature/xxx

     合并到 

    master

     上
  • 部署正式服
    1. 将分支 切回 

      master

      git checkout master

      此時 

      feature/xxx

       已經完成任務,可以删除
    2. · 打 Tag,部署正式服 服務自動處理
      • git tag vx.x.x

      • git push origin vx.x.x

    3. 建立 

      release/vx.x.x

      ,部署正式服
      • git branch release/vx.x.x

      • git push origin release/vx.x.x