兄弟,rebase 了解一下?
作者:Lxlxxx 鏈接:https://juejin.cn/post/7192823689426468919
前言
Git 作為我們?nèi)粘i_發(fā)代碼的版本管理,開發(fā)分支的管理方面起著很大作用,我們開發(fā)過程中分支通常有生產(chǎn)、預(yù)發(fā)、測試、開發(fā)這幾個分支,我們會根據(jù)項目進行的某個階段,將代碼提交到某個版本上,正常流程是先開發(fā) —>測試 —>預(yù)發(fā)—>生產(chǎn),但是通常會有很多版本,有先后上線順序,并且我們的開發(fā)人員也會是多個,在各種因素下項目的開發(fā)版本遠程分支,以及開發(fā)人員的本地分支管理就由為的關(guān)鍵。
普通開發(fā)流程
正常一個版本需要經(jīng)過的幾個階段,分別是 dev、test、uat、master,我們通過下面流程圖這么做是沒什么問題的,每個階段去將從 master 拉取的版本分支,push到對應(yīng)的分支上進行發(fā)布,正常預(yù)發(fā)和生產(chǎn)環(huán)境的代碼應(yīng)該保持一致,test 分支由于會有多個版本并行開發(fā),所以代碼和預(yù)發(fā)和生產(chǎn)比起來會有一些不一樣。

多版本并行開發(fā)
在多個版本并非開發(fā)的時候,對分支的管理就不像上面那么簡單了,涉及到多個 version,這些版本的上線時間節(jié)點也是不同的,意味著上 test 和 uat 的時間節(jié)點也是不一樣的。
這里涉及到多種情況
在后端開發(fā)人員較少的情況下,通常 2-3人 為例,完全可以從 master 拉取一個開發(fā)分支,分支格式已服務(wù)名+上線時間,例如 xxx_20230130 這個本地分支,后端開發(fā)人員一起在這個分支上進行并行開發(fā),開發(fā)階段將自己的本地分支 merge 到 dev 分支,因為只有 2-3人 所以沖突解決起來還好,有沖突解決沖突。
后端開發(fā)人員較多的情況,通常在 5-8人 為例,這時候從 master 分支拉取分支,分支格式就需要已 服務(wù)名+姓名縮寫+上線時間來命名,盡量每個人在自己命名的分支下進行開發(fā),這樣在開發(fā)階段本地測試的時候,可以做到相互不影響,但是在 merge 到遠程分支的時候,解決代碼沖突的時候需要認真仔細一些,這種活還是交給心細的人來做吧,測試的時候也需要根據(jù)版本上線的優(yōu)先級進行測試。
版本比較多的情況,比如一個月會有 4-5 個版本的開發(fā),那么上線時間也是分 4-5 個節(jié)點,這樣就需要每次從先發(fā)上線的遠程分支,將代碼 merge 到下個版本的本地開發(fā)分支上,以此類推。

Git merge
作為 git 合并分支的命令,也是在日常開發(fā)過程中經(jīng)常用到的一個命令,通常我們會將擁有最新代碼的一個版本merge到較老的一個版本,實現(xiàn)版本同步。
大體就是這么一個步驟,從剛開始的公共分支,變?yōu)?master 和 feature 分支, 通過 git merge master 命令將master 分支 merge 到 feature 分支。Merge 命令會將前面 featrue 分支所有的 commit 提交全部合并為一個新的commit 提交。??這里只有會在產(chǎn)生沖突的時候,才能產(chǎn)生新的 commit 記錄。
可以理解為 git pull =git fetch +git merge,拉取最新的遠程分支,然后將這個分支合并到另一個分支。
在公司開發(fā)的時候,通常大家喜歡這個命令,因為簡單粗暴,直接將其他分支合并到自己分支,簡單好理解。

Git rebase
作為自己的個人喜好,比較喜歡 rebase 這個命令,核心理念就是“變基”。

由上圖可看見,通過 reabse 命令將 feature 分支延續(xù)到了 master 分支后面。
在多人開發(fā)過程中,如果其他人在 master 進行 commit,這個時候你在 feature 分支提交了幾個 commit,這時候你使用 rebase 命令,會將你的 commit 提交記錄放在 master 的 commit 記錄的后面,而 merge 就會將不同分支的 commit 合并成一個新的 commit 記錄,這就是 merge 和 rebase 的不同點。
本地 feature 分支和遠端的 master 分支如果是同一條分支的話,可以使用 rebase,保證 commit 的記錄的清晰性,這個很關(guān)鍵!
??不要在公共分支使用 rebase命令,這樣會污染公共分支,這樣公共分支就會存在你的 commit 記錄,別人拉取的時候會存在你的最新的 commit 記錄。
總結(jié)
在開發(fā)中不僅需要代碼質(zhì)量高,在版本管理上也是由為的重要,上線前漏掉代碼的事情,相信大家都曾遇到過,但是這種事情是很危險??的,希望此文章能給大家在日常代碼版本管理中提交警惕,合理合并分支。
