iT邦幫忙

1

Git 學習筆記_05(Git merge合併分支)

  • 分享至 

  • xImage
  •  

簡介

我們在上一篇中提到,對於不同的開發者要對同一個專案進行開發時,可以使用git branch建立一個新的分支,這樣可以在不影響其他分支的情況下,多人同時地對專案進行開發,而在不同分支上面進行開發後,最終還是需要將所有分支的開發內容合併到master當中,所以本篇記錄了如何將多個分支合併。

合併分支 - fast forward

利用git merge可以將指定的分支合併起來。

Step 1 : 將HEAD移動到主要分支的commit上

利用git merge合併分支是將指定的分支合併到HEAD目前所在的位置上,所以我們為了將issue合併到master中,所以第一步我們需要將HEAD利用git checkout master移動到master的commit上。

https://ithelp.ithome.com.tw/upload/images/20200420/20124767NFchFZfem2.png
https://ithelp.ithome.com.tw/upload/images/20200420/201247678t2P9aeBvd.png

Step 2 : git merge 分支名稱 -> 將指定的分支合併到目前HEAD所指向的位置

當在issue分支上進行開發完成並且確認沒問題後,可以使用git merge issue將分支內容合併到master當中。
https://ithelp.ithome.com.tw/upload/images/20200420/2012476727WGNdoBIm.png

可以在master裡面的index.html中看到,屬於issue分支裡面的<h2>在issue分支中進行修改</h2>也出現在了master裡的index.html中,代表著master與issue的專案內容合併了。
https://ithelp.ithome.com.tw/upload/images/20200420/20124767AWhxKdS9KW.png
https://ithelp.ithome.com.tw/upload/images/20200420/20124767cHbiNxh1Ug.png


合併分支 - 自動合併

隨然上面有提到合併分支,但是有時候一個專案可能不只一個開發者,在你在分支上開發新功能的時候,可能有其他開發者已經更新了master上面的commit。

Step 1 : 新增一個issue分支並該改index.html內容以產生issue的commit節點

在issue的index.html中新增了<link rel="stylesheet" href="css/all.css">並且將它commit。
https://ithelp.ithome.com.tw/upload/images/20200420/20124767P2K0lUEkm1.png
https://ithelp.ithome.com.tw/upload/images/20200420/20124767BPQQmNmb5w.png
https://ithelp.ithome.com.tw/upload/images/20200420/20124767qT36y8IN1Z.png

Step 2 : 回到master中也更改index.html並且commit產生新的節點

先在master的index.html中新增一行程式碼<h1>Master</h1>,並將他commit產生一個新的節點。
https://ithelp.ithome.com.tw/upload/images/20200420/20124767fnZckQHfp2.png
https://ithelp.ithome.com.tw/upload/images/20200420/20124767qa3wMBG3MQ.png
https://ithelp.ithome.com.tw/upload/images/20200420/20124767vM83plHmey.png

Step 3 : 將兩個分支利用git merge合併

在將兩個分支進行合併後,會產生一個文件,上面寫著它已經將issue合併到master當中,如果沒有問題的話就可以將此文件關閉。
https://ithelp.ithome.com.tw/upload/images/20200420/201247677ejVmPqwTQ.png

關閉後會Git Bash上便會顯示合併完成。
https://ithelp.ithome.com.tw/upload/images/20200420/20124767PoWALPVbgu.png

在master的index.html中也會出現<link rel="stylesheet" href="css/all.css">
https://ithelp.ithome.com.tw/upload/images/20200420/201247678Bq8huYJLI.png

而此時的branch會變成下圖
https://ithelp.ithome.com.tw/upload/images/20200420/20124767e4eeRWyoQc.png


合併分支 - 解決合併衝突

在進行檔案合併的時候,若兩個不同的分支對於同一個檔案同一個部份進行更改,會發生merge衝突,因為git無法得知要保留哪一個分支的內容,所以必須手動選擇需要保留的內容再手動merge。

修改issue中的index.html

再issue的index.html中新增一行程式<h1>issue</h1>
https://ithelp.ithome.com.tw/upload/images/20200420/20124767AFw4DTioIA.png

修改master中的index.html

再master的index.html中,相同位置下新增<h1>Master</h1>
https://ithelp.ithome.com.tw/upload/images/20200420/20124767XeH16GhiTZ.png

合併分支

https://ithelp.ithome.com.tw/upload/images/20200420/20124767O5v1iwl3gR.png

當合併分支後會發現index.html中與先前不一樣,這代表兩個要合併的分支都更改到了同一個部分的資料而git並不知道哪一個要留下,所以需要手動刪除其中一個或是兩個都保留下來,下面選擇將兩行程式碼都保留下來,
https://ithelp.ithome.com.tw/upload/images/20200420/20124767DgwJC2UBB3.png

選擇好要保留的程式碼後再手動將新的index.html commit上去,這樣就是手動的將兩個分支合併起來
https://ithelp.ithome.com.tw/upload/images/20200420/20124767xXBNHe1g4Y.png

再次回到issue的index.html發現依然保持著只有一行<h1>issue</h1>的狀態,表示合併資料不會影響到issue分支
https://ithelp.ithome.com.tw/upload/images/20200420/2012476708YZqfokIN.png

參考資料 :
掌握 Git 與 Github 程式時光機


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言