初步掌握Git與Github應用
希望藉由這份筆記,讓正在學習這類知識的你/妳,能夠得到些許幫助。
Image Not Showing Possible ReasonsLearn More →
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
接續前面的內容,接下來將說明如何進行分支(branch)的合併(merge)。
Git 的合併(merge) 原則上預設是 Fast Forward。
如下圖 bugfix 分支是在 master 分支上新建的分支。
合併 bugfix 分支到 master 分支時, 如果master 分支的狀態是沒有更改過的話(開新分支後,沒有在 master 分支額外提交紀錄 – commit),那麼這個合併是非常簡單的。 bugfix 分支的歷史記錄包含了 master 分支的歷史記錄,所以只要把 bugfix 移動到 master 分支就可以導入 bugfix 分支的內容(簡單來說,就是將 master 當作標籤撕下來貼到 bugfix 目前所在之處)。這樣的合併被稱為 Fast-Forward (快轉合併)。
新分支: feature/add-page
git merge 分支名稱
git merge 分支名稱 --no-ff
–no-ff 不要快速合併no fast-forward 的好處: 可以完整保留每一個分支的 commit 紀錄
no fast-forward 的壞處: 若是 commit 紀錄只有一個,合併多次就會出現很多小叉路
– 資料來源: 連猴子都能懂的Git入門指南、連葉子都秒懂的 Fast Forward
指令 | 功能說明 |
---|---|
git merge 分支名稱 |
將目前所在分支和特定分支合併 |
開新資料夾、切換路徑、安裝本地數據庫、新增檔案
加入索引、提交紀錄
修改檔案 (index.html)
查詢狀態 (modified)、加入索引、提交紀錄
新增分支 (feature1)、查詢分支
切換到分支 feature1
開新資料夾 (css)、切換路徑、新增檔案 (all.css)、返回上一層
目前資料夾內情況
修改檔案 (index.html)
查詢狀態、加入索引、提交紀錄
回到 master 分支的最新紀錄
目前資料夾內情況 (css資料夾不見了)
將 feature1 和 master 進行分支合併
目前資料夾內情況 (css資料夾回來了)
以下說明當 master 更新的版本超過新建立的分支時(建立分支後,又回頭去更新 master 分支),如何進行同時更新。(情境: 無衝突版本)
– 圖片來源: 連猴子都能懂的Git入門指南
建立資料夾、移動路徑、安裝本地數據庫
新增檔案 (index.html)
編輯檔案 (index.html)
查詢狀態、加入索引、提交紀錄
建立分支 (feature1)、切換分支
編輯檔案 (index.html)
查詢狀態、加入索引、提交紀錄
切換分支,回到 master 分支
編輯檔案 (index.html)
查詢狀態、加入索引、提交紀錄
將 feature1 和 master 進行分支合併
出現提示訊息,因為建立分支(feature1)後,又去 master 分支上提交新版本紀錄 (commit),進入 vim 編輯器,輸入 :q
退出。
合併分支後,兩版本進行整合 (無衝突出現)。
假設團隊其中一部分在新分支上作更新,另一部分則繼續在 master 分支上作更新,這樣就很有可能會發生程式碼剛好寫在同一支檔案的某一行,在合併 (merge) 時就會發生衝突。
– 圖片來源: 連猴子都能懂的Git入門指南
以下說明如何解決衝突:
新增資料夾、切換路徑、安裝本地數據庫
新增檔案 (index.html)
編輯檔案 (index.html)
加入索引、提交紀錄
建立分支 (feature1)、查詢分支、移動分支
編輯檔案 (index.html)
查詢狀態、加入索引、提交紀錄
切換分支,回到 master 分支
編輯檔案 (index.html),修改與 feature1 分支同一行的程式碼,刻意製造衝突。
加入索引、提交紀錄
將 feature1 和 master 進行分支合併,提示出現衝突(CONFLICT),無法正常合併分支。
進入檔案 (index.html) 查看
手動解決衝突,保留2個 h1 標籤內容
因為有衝突無法進行自動合併,手動加入索引、提交紀錄,成功合併2分支