1. 主要分支介紹
2. 新功能開發工作流
2.9 開發工作和測試工作都完畢后,發布時將develop分支合并到主線
3. 發布后的產品Bug修復工作流
3.5 修復完畢后分別合并到develop分支和master分支
4. 日常開發過程中常用操作
4.1.3 撤銷上一次的提交和暫存區修改,僅保留當前修改不變
4.1.4 撤銷上一次的提交,并丟棄所有修改,包括暫存區和當前目錄中的修改,整體回檔到上上次的提交
4.1.5 撤銷暫存區和當前目錄下所有文件的修改,整體回檔到上一次提交
1. 主要分支介紹
工作流
1.1 master分支
主分支,產品的功能全部實現后,最終在master分支對外發布。
1.2 develop分支
開發分支,基于master分支克隆,產品的編碼工作在此分支進行。
1.3 release分支
測試分支,基于delevop分支克隆,產品編碼工作完成后,發布到本分支測試,測試過程中發現的小bug直接在本分支進行修復,修復完成后合并到develop分支。本分支屬于臨時分支,目的實現后可刪除分支。
1.4 bugfix分支
Bug修復分支,基于master分支或發布的里程碑Tag克隆,主要用于修復對外發布的分支,收到客戶的Bug反饋后,在此分支進行修復,修復完畢后分別合并到develop分支和master分支。本分支屬于臨時分支,目的實現后可刪除分支。
1.5 feature分支
功能特征分支,基于develop分支克隆,主要用于多人協助開發場景或探索性功能驗證場景,功能開發完畢后合并到develop分支。feature分支可創建多個,屬于臨時分支,目的實現后可刪除分支。
2. 新功能開發工作流
2.1 切換到本地倉庫工作區
cd /home/timerhunter/workspace
2.2 從遠程倉庫克隆代碼到本地倉庫
$git clone https://xxxx@localhost:8443/r/valve/V5-Lora.$git
2.3 基于master分支,創建develop分支
/* 切換到master分支 */
$git checkout master
/* 基于master分支克隆develop分支,并在克隆完畢后直接跳轉到develop分支 */
$git checkout -b develop
/* 推送develop分支到遠程倉庫 */
$git push origin develop
注:編碼工作主要在develop分支,master分支主要用來發布穩定版本
2.4 在本地倉庫的開發流程
完成一個功能點或者一天的工作結束時,將代碼提交到本地倉庫
/* 提交修改到緩沖區 */
$git add .
/* 提交修改到本地倉庫 */
/* 如果是修復的BUG,應該在修改說明的最開始添加Bug#ID,多個Bug用逗號分隔,例如Bug#002,003 */
/* 如果是完成了一個指派的任務,應該在修改說明的最開始添加Task#TaskID,例如Task#165 */
$git commit -m "Bug#123 修改說明"
/* 每完成一個功能點可以對代碼進行打包 */
$git tag -m "簡要說明增加/修復/刪除了什么功能" v0.0.0.170718
注:不是每一個Tag都需要提交到遠程倉庫,比如可以在完成一個功能點的編碼工作后未編譯就打一個包,僅存儲于本地倉庫,在編譯成功&測試通過后,再打一個新的Tag包(里程碑Tag包),僅將里程碑Tag包推送到遠程倉庫
2.5 推送代碼到遠程倉庫
當完成一個功能點或階段工作時,將代碼推送到遠程倉庫develop分支
/* 執行代碼拉取操作,防止代碼沖突 */
$git pull
/* 解決代碼沖突后,推送代碼到遠程倉庫*/
$git push origin develop
注:禁止將未編譯或編譯不通過的代碼提交到遠程倉庫,如果編碼工作進行未完成可以提交到本地倉庫中,等待該功能點全部實現后再將代碼推送到遠程倉庫中。
2.6 將代碼發布到測試分支
階段性的開發工作已完成,啟動小批量測試工作,將代碼發布到測試分支release
$git checkout develop
$git checkout -b release
$git push origin release
2.7 測試工程師提交Bug后修復
從遠程倉庫拉取代碼
/* 克隆倉庫 */
$git clone https://admin@192.168.1.88:8443/r/admin/test.$git
/* 查看遠程倉庫分支情況:克隆倉庫時只能克隆master分支,因此需要拉取指定分支,我們使用$git branch -r查看遠程分支情況 */
$git branch -r
origin/HEAD -> origin/master
origin/dev
origin/master
origin/release
/* 拉取測試分支 */
$git checkout -b release origin/release
修復流程同#2.4,#2.5;
注意在$git commit時的修復說明中添加Bug#BugID關鍵字
完成一個Bug修復或完成階段性工作后,將代碼推送到遠程分支
2.8 測試工作完成后,合并代碼到develop分支
/* 切換到develop分支 */
$git checkout develop
/* 執行合并操作,將release分支代碼合并到develop分支 */
$git merge release
/* 如果合并報錯,則解決沖突,沖突解決后繼續再次執行合并 */
2.9 開發工作和測試工作都完畢后,發布時將develop分支合并到主線
$git checkout master
$git merge develop
2.10 階段開發完畢,打一個里程碑Tag包
/* 創建里程碑Tag */
$git tag -m "Task#003 v1.0.0 首版發布" v1.0.0.170718
/* 推送里程碑Tag到遠程倉庫 */
$git push origin v1.0.0.170718
3. 發布后的產品Bug修復工作流
3.1 獲取Bug產品的軟件發布版本號
3.2 查找里程碑Tag
/* 查詢里程碑及其提交說明 */
$git tag -n1 -l v*
3.3 基于里程碑Tag創建分支
/* git checkout -b [創建的分支名稱] [里程碑Tag名稱] */
$git checkout -b bugfix-v1.0.0.170718 v1.0.0.170718
3.4 修復代碼后可以查詢修改過的地方
$git diff
3.5 修復完畢后分別合并到develop分支和master分支
/* 合并到develop */
$git checkout develop
$git merge hotfix-v1.0.0.170718
/* 提交到遠程倉庫develop分支 */
$git push origin develop
/* 合并到master:如果隨下一個版本再發布,可不用合并至master分支 */
$git checkout master
$git merge develop
/* 提交到遠程倉庫master分支 */
$git push origin master
3.6 創建新的里程碑Tag
$git tag -m "Bug#002 修復某某Bug" v1.0.1.170719
/* 推送到遠程倉庫 */
$git push origin v1.0.1.170719
3.7 刪除bugfix分支
/* 刪除本地分支-$git branch -d [本地分支名]*/
$git branch -d bugfix-v1.0.0.170718
/* 刪除遠程分支-$git push origin :[遠程分支名]*/
$git push origin :bugfix-v1.0.0.170718
4. 日常開發過程中常用操作
4.1 撤銷操作
4.1.1 提交后發現丟了幾個文件沒有提交
/* 正常提交 */
$git commit -m "發布v1.0"
/* 發現丟了修改記錄,重新添加 */
$git add CHANGELOG.md
/* 重新提交,仍以"發布v1.0的名義提交",最終只有一個提交*/
$git commit --amend
4.1.2 撤銷上一次的提交,但是保留暫存區和當前修改不變
/* 正常提交 */
$git commit -m "發布v1.0"
/* 將會撤銷“發布v1.0”的提交,但是保留暫存區和當前目錄中文件的修改 */
$git reset --soft HEAD~
4.1.3 撤銷上一次的提交和暫存區修改,僅保留當前修改不變
/* 正常提交 */
$git commit -m "發布v1.0"
/* 將會撤銷“發布v1.0”的提交,但是保留暫存區和當前目錄中文件的修改 */
$git reset --mixed HEAD~
4.1.4 撤銷上一次的提交,并丟棄所有修改,包括暫存區和當前目錄中的修改,整體回檔到上上次的提交
/* 正常提交 */
$git commit -m "發布v1.0"
/* 將會撤銷“發布v1.0”的提交,但是保留暫存區和當前目錄中文件的修改 */
$git reset --hard HEAD~
4.1.5 撤銷暫存區和當前目錄下所有文件的修改,整體回檔到上一次提交
注意:此操作非常危險,會丟失所有修改,直接整體回檔到指定的版本,謹慎使用
/* 正常提交 */
$git commit -m "發布v1.0"
/* 修改多個文件 */
/* 添加到暫存區 */
git add .
/* 撤銷暫存區和本地目錄下所有文件的修改,并整體回檔到上一次提交的狀態 */
$git reset --hard HEAD
/* 可以修改HEAD為SHA-1值回檔到任意版本 */
/* 使用git log查看每次提交的SHA-1值,可以僅指定前7位 */
$git reset --hard 745d8cd
4.1.6 將文件提交到暫存區后撤回
在對文件執行git add操作后,重新撤回
/* 添加文件到暫存區 */
$git add README
/* 將文件從暫存區撤回 */
$git reset HEAD README
4.1.7 撤銷對文件的修改
在對文件進行修改后,發現思路不對,需要將文件恢復至原有狀態
/* 撤銷對CHANGELOG.md文件的修改,請注意這是一個危險的命令,
* 對指定文件的修改都會被取消,會還原成上次提交的樣子 */
$git checkout -- CHANGELOG.md