本系列包含:
- Git 圖文詳解(一):簡介及基礎(chǔ)概念
- Git 圖文詳解(二):Git 安裝及配置
- Git 圖文詳解(三):常用的 Git GUI
- Git 圖文詳解(四):Git 使用入門
- Git 圖文詳解(五):遠(yuǎn)程倉庫
- Git 圖文詳解(六):Git 利器 - 分支
- Git 圖文詳解(七):標(biāo)簽管理
- Git 圖文詳解(八):后悔藥 - 撤銷變更
- Git 圖文詳解(九):工作中的 Git 實(shí)踐
1.Git Flow
Git Flow(Git 工作流程)是指軟件項(xiàng)目中的一種 Git 分支管理模型,經(jīng)過了大量的實(shí)踐和優(yōu)化,被認(rèn)為是現(xiàn)代敏捷軟件開發(fā)和 DevOps(開發(fā)、技術(shù)運(yùn)營和質(zhì)量保障三者的交集)的最佳實(shí)踐。
? 主分支:master
,穩(wěn)定版本代碼分支,對(duì)外可以隨時(shí)編譯發(fā)布的分支,不允許直接 Push 代碼,只能請(qǐng)求合并(pull request
),且只接受 hotfix
、release
分支的代碼合并。
? 熱修復(fù)分支:hotfix
,針對(duì)線上緊急問題、Bug 修復(fù)的代碼分支,修復(fù)完后合并到主分支、開發(fā)分支。
- ① 切換到
hotfix
分支,從master
更新代碼; - ② 修復(fù) Bug;
- ③ 合并代碼到
dev
分支,在本地 Git 中操作即可; - ④ 合并代碼到
master
分支。
? 發(fā)版分支:release
,版本發(fā)布分支,用于迭代版本發(fā)布。迭代開發(fā)完成后,合并 dev
代碼到 release
,在 release
分支上編譯發(fā)布版本,以及修改 Bug(定時(shí)同步 Bug 修改到 dev
分支)。測試完成后,此版本可以作為發(fā)版使用,然后把穩(wěn)定的代碼 Push 到 master
分支,并打上版本標(biāo)簽。
? 開發(fā)分支:dev
,開發(fā)版本分支,針對(duì)迭代任務(wù)開發(fā)的分支,日常開發(fā)原則上都在此分支上面,迭代完成后合并到 release
分支,開發(fā)、發(fā)版兩不誤。
? 其他開發(fā)分支:dev-xxx
,開發(fā)人員可以針對(duì)模塊自己創(chuàng)建本地分支,開發(fā)完成后合并到 dev
開發(fā)分支,然后刪除本地分支。
2.金屋藏嬌 stash
當(dāng)你正在 dev
分支開發(fā)一個(gè)功能時(shí),代碼寫了一半,突然有一個(gè)線上的 Bug 急需要馬上修改。dev
分支 Bug 沒寫完,不方便提交,就不能切換到主分支去修復(fù)線上 Bug。Git 提供一個(gè) stash
功能,可以把當(dāng)前 工作區(qū)、暫存區(qū) 未提交的內(nèi)容 “隱藏” 起來,就像什么都沒發(fā)生一樣。
# 有未提交修改,切換分支時(shí)報(bào)錯(cuò)
$ 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
# 查看被隱藏的內(nèi)容
$ git stash list
stash@{0}: WIP on main: 2bc012c s
# 比較一下,什么都沒有,一切都沒有發(fā)生過!
$ git diff
# 去其他分支修改bug,修復(fù)完成回到當(dāng)前分支,恢復(fù)工作區(qū)
$ git stash pop
在上面示例中,有未提交修改,切換分支時(shí)報(bào)錯(cuò)。錯(cuò)誤提示信息很明確了,commit
提交或 stash
隱藏:Please commit your changes or stash them before you switch branches.
?? 如果切換分支時(shí),未提交修改的內(nèi)容沒有沖突,是可以成功切換的,未提交修改會(huì)被帶過去。
|
|
---|---|
git stash |
把未提交內(nèi)容隱藏起來,包括未暫存、已暫存。 等以后恢復(fù)現(xiàn)場后繼續(xù)工作 |
git stash list |
查看所有被隱藏的內(nèi)容列表 |
git stash pop |
恢復(fù)被隱藏的內(nèi)容,同時(shí)刪除隱藏記錄 |
git stash save “message” |
同 git stash ,可以備注說明 message
|
git stash apply |
恢復(fù)被隱藏的文件,但是隱藏記錄不刪除 |
git stash drop |
刪除隱藏記錄 |
?? 當(dāng)然這里先提交到本地也是可以的,只是提交不是一個(gè)完整的功能代碼,而是殘缺的一部分,影響也不大。
3.揀選提交 cherry-pick
當(dāng)有一個(gè)緊急 Bug,在 dev
上修復(fù)完,我們需要把 dev
上的這個(gè) Bug 修復(fù)所做的修改 “復(fù)制” 到 master
分支,但不想把整個(gè) dev
合并過去。為了方便操作,Git 專門提供了一個(gè) cherry-pick
命令,讓我們能復(fù)制一個(gè)特定的提交到當(dāng)前分支,而不管這個(gè)提交在哪個(gè)分支。文章來源:http://www.zghlxwxcb.cn/news/detail-759536.html
如上圖,操作過程相當(dāng)于將該提交導(dǎo)出為補(bǔ)丁文件,然后在當(dāng)前 HEAD
上重放,形成無論內(nèi)容還是提交說明都一致的提交。文章來源地址http://www.zghlxwxcb.cn/news/detail-759536.html
- 希望把
dev
分支上的v7
提交的內(nèi)容合并到master
,但不需要其他的內(nèi)容。 - 在
master
分支上執(zhí)行指令git cherry-pick v7
,會(huì)產(chǎn)生一個(gè)新的v7’
提交,內(nèi)容和v7
相同。 - 同時(shí)更新
master
、HEAD
,以及工作區(qū)。
# 選擇一個(gè)commit,合并進(jìn)當(dāng)前分支
$ git cherry-pick [commit]
到了這里,關(guān)于【DevOps】Git 圖文詳解(九):工作中的 Git 實(shí)踐的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!