首頁 >開發工具 >Git >git怎麼合併分支程式碼

git怎麼合併分支程式碼

青灯夜游
青灯夜游原創
2023-01-04 11:24:4810367瀏覽

git合併分支程式碼的方法:1、使用「git merge」指令,該指令用來做分支合併,可以將其他分支中的內容合併到目前分支。 2.使用「git rebase」指令,該指令用於改變目前的分支的基點,進而實現分支合併。

git怎麼合併分支程式碼

#本教學操作環境:Windows7系統、Git2.30.0版、Dell G3電腦。

在專案中,我們總是會創建許多分支進行不同功能或需求的開發,等功能完成後再合併回主分支。那麼如何才能優雅的合併分支呢?如果此時你提起了興趣,那麼不妨繼續讀下去了。

建立多人開發場景

1. 建立倉庫

// 初始化仓库
git init
// 创建a.txt
touch a.txt
// 创建b.txt
touch b.txt
// 加入暂存区
git add .
// 提交
git  commit -m 'initial'

git怎麼合併分支程式碼

2. 建立feature 分支

git checkout -b feature

git怎麼合併分支程式碼

#3. 兩個分支同時開發

feature 分支開發下一版本新功能,提交了兩次,分別修改a.txt 檔案和b.txt 檔案。

git怎麼合併分支程式碼

master 分支開發本次版本功能,同樣提交了兩次,並且修改了 a.txt 檔案和 b.txt 檔案。


git怎麼合併分支程式碼

目前分支情況如下圖,各節點上面的字元是每次commit 的雜湊值,目前master 分支的header 在c5 節點上,feature 分支的header 在c3 節點上。
git怎麼合併分支程式碼

這個時候需要將feature 分支合併回master 分支,有兩種方案:

  • 在master 分支上直接merge feature 分支;

  • 是先在feature 分支上rebase(變基),然後在master 分支上merge feature 分支。

以下分別說明這兩個方案:

#合併指令1:git merge

#git merge 用來做分支合併,將其他分支中的內容合併到目前分支。

git merge 操作比較暴力,也是用的比較多的方式,下面示範的是feature 分支合併至master 分支,具體過程如下:

  • 找到feature 分支和master 分支的最近共同祖先commit 節點c1;

  • 把feature 分支的最新一次commit 節點c3 和master 分支上的最新一次commit 節點c5 合併,此時若有衝突,則一次解決所有衝突,然後產生一個新的commit 節點c6;

  • #同時根據兩個分支上的commit 時間的先後順序,依次放到master 分支上,使用git log可以看到時間順序。

上面流程的結果示意圖如下:

git怎麼合併分支程式碼

#在專案中的操作指令如下。可以看到執行 git merge feature 指令後,有衝突,進入 merging 工作區,然後一次解決所有衝突後,提交一個新的 commit。

git怎麼合併分支程式碼

執行 gitk 命令列,可以在介面上看到目前分支如下圖所示。有一個新的 commit。
git怎麼合併分支程式碼

合併指令2:git rebase

這個指令從名字上就可以直觀看出它的功能:改變目前的分支的基點。對於 feature 分支,它是從 master 分支的 c1 節點建立的分支,所以它的基點就是 c1。如果在 feature 分支上執行 git rebase master ,其流程大致如下:

  • 找到目前 master 分支最新的 commit 節點 c5,將 feature 分支的基點變成 c5 節點。 ;

  • 若 feature 分支與 master 分支有衝突,那麼將根據 feature 分支的提交時間,依序解決衝突,並修改 feature 分支此次 commit 的雜湊值。

  • 最終在分支上看,呈現一條直線,但是存在歷史commit覆蓋的問題。

上面過程的結果示意圖如下所示,其中 c2’和 c3’表示雜湊值改變了。

git怎麼合併分支程式碼

值得注意的是:

  • #執行rebase 操作的時候,需要保證master 分支處於最新狀態,否則在merege 合併的時候也可能有衝突,就失去使用rebase 的意義。

  • 千萬不要對已經推到遠端的內容進行rebase,如果有人拉取遠端程式碼後修改並提交,分支會變得極其麻煩。

了解其基本流程後,我們就可以是用rebase 指令開始進行合併分支的操作​​:

  • 在專案中執行git rebase master,如下圖所示。因為兩次提交都存在衝突,故在 rebase 工作區中需要依序解決這些衝突。

git怎麼合併分支程式碼

在feature 分支上執行gitk 指令,可以在介面中看到:
git怎麼合併分支程式碼

  • ##feature 分支完成變基之後,切換回master 分支執行git merge feature,就可以完成合併操作。

git怎麼合併分支程式碼

在 master 分支上執行 gitk,其分支結構如下。可以看到分支呈現一條線,看起來非常清爽。

git怎麼合併分支程式碼

#說明:git stash

有時候分支上的程式碼還沒開發完成,需要合併分支,此時只需要:

1、執行git stash 將工作區內容儲存起來,然後選擇上述兩種合併分支的方式進行分支合併。

git怎麼合併分支程式碼

2、完成分支合併後,切回開發的分支,執行 git stash pop 將工作區內容彈出就可以繼續愉快的寫程式碼了。

git怎麼合併分支程式碼

總結

git merge 比較粗暴,也是大多數會選擇的方式,這種方式可以保證每個commit 都按照時間順序排列,但是分支圖會非常凌亂,而會引入一次沒有意義的commit。

git rebase 在歷史提交記錄就是一條線,非常優雅,但有修改歷史commit的風險,而git log查看日誌時commit時間線錯亂。同時,謹記

已推送至遠端的內容就不要再變成基底,否則分支會變得很亂。

個人傾向於使用 rebase 方法,畢竟 commit 的認知成本就擺在那裡,而且看著也舒服。不過如果開發人員很多,還是merge吧,畢竟一個個解決衝突會煩死個人,哈哈哈

在在專案中,我們總是會創建許多分支進行不同功能或需求的開發,等功能完成後再合併回主分支。那麼如何才能優雅的合併分支呢?如果此時你提起了興趣,那麼不妨繼續讀下去了。

以上是git怎麼合併分支程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn