4、Git之分支操作

Javaer1995發表於2024-05-20

4.1、分支的概述

在版本控制過程中,當需要同時推進多個任務時,可以為每個任務建立的單獨分支。

雖然分支的底層實現是指標的引用,但是初學階段可以將分支簡單理解為副本,一個分支就是一個單獨的副本。

使用分支,意味著從原來的主幹上分離開,在分支上做的任何改動,在合併前都不會影響到主幹。

image

4.2、分支的優點

可以並行推進多個功能模組的開發,提高開發效率。

各個分支在開發過程中,如果某一個分支開發失敗,不會對其他分支有任何影響。失敗的分支刪除重新開始即可。

4.3、分支的操作

4.3.1、命令速查表

命令 作用
git branch 分支名 建立分支
git branch -v 檢視分支
git checkout 分支名 切換分支
git merge 分支名 把指定的分支合併到當前分支上
git branch -d 分支名 刪除分支

4.3.2、檢視分支

image

git branch -v

本示例的分支資訊說明:

  • master :分支名稱

  • bcd91c3 :分支當前指向的版本號

  • 第二次提交:分支當前指向的版本的日誌資訊

4.3.3、建立分支

image

git branch 分支名

本示例根據 master (主幹)分支建立了 user 分支;剛建立的 user 分支除了分支名之外,其他都和 master (主幹)分支是一樣的。

4.3.4、切換分支

image

git checkout user

切換分支成功後,命令列會提示目前是在 user 分支上;檢視分支時,user 分支也被用星號高亮標記。

4.3.5、修改分支

4.3.5.1、在新分支上新增檔案

image

4.3.5.2、將新分支的改動提交到本地庫

image

4.3.5.3、切換回主幹分支

image

切換回 master 主幹分支後,可以發現工作區沒有在 user 分支時新增的檔案,即 master 主幹分支沒有受到 user 分支的影響。

4.3.6、合併分支

image

git merge user

如上圖所示,合併 user 分支到 master 分支後, master 分支多了一個在 user 分支新增的檔案

image

如上圖所示,合併分支後,user 分支和 master 分支的版本號和提交日誌資訊都是一致的。

4.3.7、模擬衝突

4.3.7.1、user分支操作

image

切換到 user 分支,修改 hello.txt 檔案,並提交到本地庫。

4.3.7.2、master分支操作

image

切換到 master 分支,修改 hello.txt 檔案,並提交到本地庫。

4.3.7.3、合併產生衝突

image

如上圖所示,合併 user 分支到 master 分支時,產生了衝突;分支的狀態也由 master 變成了 master|MERGING ,說明還沒有合併成功。

合併衝突提示資訊說明:

  • Merge conflict in hello.txt :在 hello.txt 中存在合併衝突。

  • Automatic merge failed:自動合併失敗。

  • fix conflicts and then commit the result:需要處理衝突後再提交。

開啟發生合併衝突的檔案(本例為 hello.txt ),可以看到具體發生衝突的內容:

  • 在“<<<<<<<HEAD”和“=======”之間是當前分支的內容。

  • 在“=======”和“>>>>>>>”之間是要合併的內容。

4.3.7.4、合併衝突的原因

合併分支時,如果兩個分支在同一個檔案的同一個位置做了不同的修改,就會產生衝突。

因為Git 無法自動替我們決定使用哪一個,所以必須手動決定新內容。

4.3.8、解決衝突

4.3.8.1、手動處理衝突的內容

image

4.3.8.2、提交處理衝突後的內容

image

如上圖所示,當衝突的內容被處理並提交後,分支的狀態也由 master|MERGING 變成了 master,說明已經合併成功。

注意:此時使用的 git commit 命令不能帶檔名。

4.3.8.3、注意事項

image

本例演示解決的是合併 user 分支到 master 分支時發生的內容衝突,衝突的地方在 master 分支,解決衝突的地方也是在 master 分支。

因此,如上圖所示, user 分支的內容不會受到任何影響。

4.3.9、刪除分支

image

 git branch -d 分支名

當某個分支沒有存在必要的時候,可以將其刪除。

注意:當要刪除的分支是當前分支時,會報錯:“error: cannot delete branch '當前分支名' used by worktree at '工作區路徑'”;
這時只需要將當前分支切換為其他分支,就能成功刪除。

相關文章