前兩篇介紹了 git基本概念 和 具體的規範,本篇針對不同的使用場景做演示。
分支
分支命名
- master 分支名稱保持不變
- develop 分支名稱保持不變
- feature/<分支名稱> 功能分支
- release/<分支名稱> 待上線分支
- hotfix/<分支名稱> 線上緊急修復分支
拉取遠端分支
git checkout -b <分支名稱> origin/<分支名稱> 拉取並關聯遠端分支
建立新分支
git checkout -b <分支名稱> 建立新分支並切換到新分支
提交備註規範
首行,簡明扼要地描述更新內容; 空出一行; 之後,詳細描述更新內容。
如果對應jira的問題,填寫jira路徑:issue:http://jira.n.xiaomi.com/test1
舉例
修復bug,工單詳情頁面,工單記錄頁面,客服頭像不顯示
<空行佔位符>
導致原因:程式碼邏輯考慮不全
jira: http://jira.n.xiaomi.com/test1
如何整理自己的commit,保持commit清晰
git commit --amend 修改最近一次提交; git rebase -i 整理提交
- edit,編輯某一次提交的備註;
- squash,把當前commit向前合併,一直合併到pick為止;
- fixup,和squash非常類似,唯一的區別就是,fixup會忽略當前commit的資訊;
再次強調:如果commit已經提交到遠端git倉庫,一定不要再進行整理合並commit。
舉例說明
-
基於develop分支建立一個功能分支,名稱為feature/feature1;
git checkout -b feature/feature1
-
新建一個檔案test.txt,提交;
git commit -m ‘add test.txt file’
-
修改檔案test.txt,新增一行內容,提交;
git commit -m ‘update text.txt file, append content: love vae music’
-
發現上一步新增的內容錯誤,想修改內容,但不新增新的commit 修改為正確的內容;
git commit —amend; 會彈出修改視窗,修改註釋,如果不變,直接回車;
-
連續提交3個commit,但想合併為1個commit;
-
使用git log,確定要rebase的commit-id;
-
git rebase -i df87607d5dd24c0a73f23284e6988d6d32c0d3a4 顯示編輯視窗
-
進行編輯,修改如下:
-
最終結果只會保留commit1:
新人加入,如何加入開發
從遠端拉取develop分支: git checkout -b <分支名稱> origin/<分支名稱> 拉取並關聯遠端分支
如果要開發新功能,基於develop分支建立feature分支: git checkout -b feature/feature1
如果要修復線上緊急bug,基於master分支建立hotfix分支: git checkout -b hotfix/hotfix1
開發一個feature
基於develop分支建立feature分支;
開發完成後,整理自己的commit,把無意義的commit進行合併;
準備在下一次迭代上線,整理完成後,合併到develop分支;
不準備在下一次迭代上線,整理完成後,push當前分支到遠端git倉庫,等待準備上線時,再合併到develop分支: git push origin feature/feature1:feature/feature1
合併到develop分支前,一定要經過本地測試!
確定版本上線計劃及上線
整體上,要有明確的上線計劃,確定每次上線哪些功能;
只有確認在下一次版本上線的feature才能合併到develop分支;
提交測試,修復測試反饋的bug
提交測試前,確保所有人的程式碼修改都已提交到develop分支;
基於develop分支,建立release分支: git checkout -b release/release1
釋出release/release1分支到測試環境,測試人員進行測試;
測試過程中發現的bug,直接在release分支進行修復並提交;
測試完成,確認上線,合併程式碼到master分支和develop分支,用release分支名打Tag,刪除release分支: git tag release.1.1.1 git branch -d release/release1
修復線上bug
基於master分支,建立hotfix分支 git checkout -b hotfix/hotfix1
修復完成後,finish hotfix,合併程式碼到master和develop分支;