本系列包含:
- Git 圖文詳解(一):簡介及基礎概念
- Git 圖文詳解(二):Git 安裝及配置
- Git 圖文詳解(三):常用的 Git GUI
- Git 圖文詳解(四):Git 使用入門
- Git 圖文詳解(五):遠程倉庫
- Git 圖文詳解(六):Git 利器 - 分支
- Git 圖文詳解(七):標簽管理
- Git 圖文詳解(八):后悔藥 - 撤銷變更
- Git 圖文詳解(九):工作中的 Git 實踐
Git 圖文詳解(九):工作中的 Git 實踐
- 1.Git Flow
- 2.金屋藏嬌 stash
- 3.揀選提交 cherry-pick
1.Git Flow
Git Flow(Git 工作流程)是指軟件項目中的一種 Git 分支管理模型,經過了大量的實踐和優化,被認為是現代敏捷軟件開發和 DevOps(開發、技術運營和質量保障三者的交集)的最佳實踐。
? 主分支:master
,穩定版本代碼分支,對外可以隨時編譯發布的分支,不允許直接 Push 代碼,只能請求合并(pull request
),且只接受 hotfix
、release
分支的代碼合并。
? 熱修復分支:hotfix
,針對線上緊急問題、Bug 修復的代碼分支,修復完后合并到主分支、開發分支。
- ① 切換到
hotfix
分支,從master
更新代碼; - ② 修復 Bug;
- ③ 合并代碼到
dev
分支,在本地 Git 中操作即可; - ④ 合并代碼到
master
分支。
? 發版分支:release
,版本發布分支,用于迭代版本發布。迭代開發完成后,合并 dev
代碼到 release
,在 release
分支上編譯發布版本,以及修改 Bug(定時同步 Bug 修改到 dev
分支)。測試完成后,此版本可以作為發版使用,然后把穩定的代碼 Push 到 master
分支,并打上版本標簽。
? 開發分支:dev
,開發版本分支,針對迭代任務開發的分支,日常開發原則上都在此分支上面,迭代完成后合并到 release
分支,開發、發版兩不誤。
? 其他開發分支:dev-xxx
,開發人員可以針對模塊自己創建本地分支,開發完成后合并到 dev
開發分支,然后刪除本地分支。
2.金屋藏嬌 stash
當你正在 dev
分支開發一個功能時,代碼寫了一半,突然有一個線上的 Bug 急需要馬上修改。dev
分支 Bug 沒寫完,不方便提交,就不能切換到主分支去修復線上 Bug。Git 提供一個 stash
功能,可以把當前 工作區、暫存區 未提交的內容 “隱藏” 起來,就像什么都沒發生一樣。
# 有未提交修改,切換分支時報錯
$ git checkout dev
error: Your local changes to the following files would be overwritten by checkout:README.md
Please commit your changes or stash them before you switch branches.
Aborting# 隱藏
$ git stash
Saved working directory and index state WIP on main: 2bc012c s# 查看被隱藏的內容
$ git stash list
stash@{0}: WIP on main: 2bc012c s# 比較一下,什么都沒有,一切都沒有發生過!
$ git diff# 去其他分支修改bug,修復完成回到當前分支,恢復工作區
$ git stash pop
在上面示例中,有未提交修改,切換分支時報錯。錯誤提示信息很明確了,commit
提交或 stash
隱藏:Please commit your changes or stash them before you switch branches.
📢 如果切換分支時,未提交修改的內容沒有沖突,是可以成功切換的,未提交修改會被帶過去。
| |
---|---|
git stash | 把未提交內容隱藏起來,包括未暫存、已暫存。 等以后恢復現場后繼續工作 |
git stash list | 查看所有被隱藏的內容列表 |
git stash pop | 恢復被隱藏的內容,同時刪除隱藏記錄 |
git stash save “message” | 同 git stash ,可以備注說明 message |
git stash apply | 恢復被隱藏的文件,但是隱藏記錄不刪除 |
git stash drop | 刪除隱藏記錄 |
📢 當然這里先提交到本地也是可以的,只是提交不是一個完整的功能代碼,而是殘缺的一部分,影響也不大。
3.揀選提交 cherry-pick
當有一個緊急 Bug,在 dev
上修復完,我們需要把 dev
上的這個 Bug 修復所做的修改 “復制” 到 master
分支,但不想把整個 dev
合并過去。為了方便操作,Git 專門提供了一個 cherry-pick
命令,讓我們能復制一個特定的提交到當前分支,而不管這個提交在哪個分支。
如上圖,操作過程相當于將該提交導出為補丁文件,然后在當前 HEAD
上重放,形成無論內容還是提交說明都一致的提交。
- 希望把
dev
分支上的v7
提交的內容合并到master
,但不需要其他的內容。 - 在
master
分支上執行指令git cherry-pick v7
,會產生一個新的v7’
提交,內容和v7
相同。 - 同時更新
master
、HEAD
,以及工作區。
# 選擇一個commit,合并進當前分支
$ git cherry-pick [commit]