日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

你合并代碼用 Merge 還是用 Rebase ?

來源: 責編: 時間:2024-07-06 07:45:15 209觀看
導讀你們平時合并代碼的時候用 merge 還是 rebase?我問了一圈,發現有些人不僅沒用過 rebase,而且根本就沒聽說過。別慌,不要緊,沒有 rebase 也不影響開發,不影響合并,不影響發版!我用 Git 很長時間也一直根本沒聽過 rebase 為何物

你們平時合并代碼的時候用 merge 還是 rebase?aV828資訊網——每日最新資訊28at.com

我問了一圈,發現有些人不僅沒用過 rebase,而且根本就沒聽說過。別慌,不要緊,沒有 rebase 也不影響開發,不影響合并,不影響發版!aV828資訊網——每日最新資訊28at.com

我用 Git 很長時間也一直根本沒聽過 rebase 為何物,只知道合并分支就是 merge ,直到有一個新入職的同事跟我說:“為什么合并分支不用 rebase 呢?我之前公司都用 rebase,不怎么用merge。"aV828資訊網——每日最新資訊28at.com

在那之后,我還頭一次聽說 rebase 這個命令。aV828資訊網——每日最新資訊28at.com

只有在涉及到分支合并的時候才談到 merge 和 rebase,如果沒有合并的需求,那怎么整都無所謂,就像我自己的小產品,從頭到尾都只有個 main 分支,開發人只有我自己,也沒有沖突一說,有時候寫好幾天都不帶push一次的。aV828資訊網——每日最新資訊28at.com

用到分支合并基本都是多人協作的團隊項目,通常會有一個主分支,然后有開發分支,有時候還會有一些臨時的 feature 分支。aV828資訊網——每日最新資訊28at.com

merge 合并分支

同一個分支也可能出現 merge 的情況,例如我這邊有一個老項目平時基本上沒其他人動,所以我在修改這個項目的時候基本上想不起來要先pull 一下,當然了,這是一個非常不好的習慣,所以有時候一push代碼,發現有人竟然提交新代碼上去了,所以這種情況下就自動 merge 一下。aV828資訊網——每日最新資訊28at.com

今天主要討論的是分支合并時的 merge。aV828資訊網——每日最新資訊28at.com

下圖是 merge 合并分支時前后版本變化的情況。aV828資訊網——每日最新資訊28at.com

圖片圖片aV828資訊網——每日最新資訊28at.com

merge 會創建一個新的合并提交,將兩個分支的歷史記錄保留在一起。aV828資訊網——每日最新資訊28at.com

它的特點就是日志保存完整,不管你之前合并進來的那個版本有多少個提交歷史,都會被完整的合并到目標分支。aV828資訊網——每日最新資訊28at.com

以下是使用 merge 合并后的主分支 Graph 情況,看上去是不是有點亂。aV828資訊網——每日最新資訊28at.com

圖片圖片aV828資訊網——每日最新資訊28at.com

假設有兩個分支,main 和 dev分支,在 dev 分支上開發,然后合并到 main 分支,合并的大致流程如下。aV828資訊網——每日最新資訊28at.com

git checkout maingit pull origin maingit merge dev# 解決沖突后git commit -m "Merge dev into main"git push origin main

Rebase 合并分支

rebase 會將分支上的更改重新應用在目標分支上,重寫提交歷史。aV828資訊網——每日最新資訊28at.com

圖片圖片aV828資訊網——每日最新資訊28at.com

rebase 方式提交的版本歷史是線性的,不會創建新的合并提交,歷史記錄非常干凈。aV828資訊網——每日最新資訊28at.com

同樣地,假設當前有兩個分支,main 和 dev,用 rebase 方式合并分支的大致流程如下。aV828資訊網——每日最新資訊28at.com

git checkout devgit pull origin devgit rebase main# 解決沖突后git rebase --continuegit push origin dev --force

合并壓縮

在rebase 的時候還可以使用 squash 參數來壓縮提交記錄,例如下圖,Feature 1 分支的 A、B、C 三個提交記錄,使用 rebase squash 后會在主分支變為一個提交記錄 F。aV828資訊網——每日最新資訊28at.com

圖片圖片aV828資訊網——每日最新資訊28at.com

使用方式如下,git rebase -i HEAD~3 命令準備壓縮最近的3次提交,然后在編輯模式下將pick 改為 squash,最后推送到遠端倉庫。aV828資訊網——每日最新資訊28at.com

適合那種:aV828資訊網——每日最新資訊28at.com

git checkout devgit rebase -i HEAD~3# 進入編輯模式后,修改 `pick` 為 `squash`# 保存并關閉編輯器后,編輯新的提交信息并保存git push origin dev --force

選擇使用哪種方法

具體使用哪種方式合并要根據場景和習慣而定,沒有絕對的好壞。aV828資訊網——每日最新資訊28at.com

使用 merge,如果你希望保留分支的歷史記錄,并且不介意有合并提交。適用于團隊合作時保留每個人的工作記錄。aV828資訊網——每日最新資訊28at.com

使用 rebase,如果你希望保持提交歷史的簡潔和線性,適用于希望干凈歷史的項目。aV828資訊網——每日最新資訊28at.com

有些公司規定只能用 rebase,它更適合那種只有單一版本的項目,只有一個主分支一直向前推進,且沒有多個分支并行的情況,例如一個產品既要維護2.x 版本又要維護3.x版本,那用 rebase就不合適了。aV828資訊網——每日最新資訊28at.com

之前 Vue 項目就是用 rebase 方式合并分支的。aV828資訊網——每日最新資訊28at.com

圖片 圖片 aV828資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-99172-0.html你合并代碼用 Merge 還是用 Rebase ?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 擺脫 if-else 束縛的清潔編碼之旅:這些技術幫你實現

下一篇: 攜程門票秒殺系統的設計與實踐

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 鄂托克旗| 寻乌县| 襄樊市| 本溪市| 房产| 即墨市| 景泰县| 九龙坡区| 蕉岭县| 仙桃市| 民乐县| 湄潭县| 宣武区| 渝北区| 遂川县| 武冈市| 杭锦后旗| 扬中市| 太和县| 遂溪县| 密云县| 邵阳县| 邻水| 石渠县| 太保市| 达州市| 洞口县| 东方市| 佛学| 石首市| 赣州市| 阜阳市| 恩平市| 修水县| 启东市| 五莲县| 辽源市| 那坡县| 长葛市| 科技| 沙田区|