# Git #5 衝突 ###### tags: `Git` ## Git pull 詳細語法講解 | 指令 | 說明 | | -------- | -------- | | git fetch origin(遠端數據庫名稱) master | 將遠端的檔案抓下來一份到本地,但尚未 merge | | git merge origin/main (數據庫名稱/分支)| 把 git fetch 抓下來的遠端數據庫檔案進行合併 | ## 衝突 一個專案有可能會有很多人再一起完成,有可能在修改檔案的時候,都改到同樣的地方,有可能執行 `git pull` 拉下遠端數據庫的時候把你同樣修改的地方覆蓋掉了 --- ## git pull = git fetch + git merge 執行 `git pull` 會先後執行兩個動作,第一步是`下載檔案` 第二步則是 `合併` * `git fetch` 就是在下載 * `git merge 分支` 就是在合併 --- ## git fetch origin main - 抓下遠端數據庫檔案,但是不會合併 ### step1 準備 做個練習,我們預設建立了一個遠端數據庫(GitHub repo),並且連線到本地端,在本地數據庫新增了兩個 commit 並推到遠端數據庫 ( git add . -> git commit -m 'text' *2 ) , 然後 `git push` 上去到遠端數據庫 ### step2 在遠端數據庫新增一個 commit ![](https://i.imgur.com/JpleOEn.png) 可以看到有一支鉛筆,點下去後可以修改檔案並且新增一個 commit ![](https://i.imgur.com/CDK1CQI.png) 新增成功可以看到2個 commit 變成 3個了 ![](https://i.imgur.com/uplaLrR.png) 但是你將專案放到 source tree 的時候,第3個 commit 並不會出現 ### step3 git fetch origin main ![](https://i.imgur.com/SjWvC4v.png) 為了避免第三個 commit 影響到本地端尚未同步的檔案,我們使用 `git fetch origin main` , 來抓檔案下來 ![](https://i.imgur.com/1BjZ6rX.png) 我們使用了 `git fetch origin main` 之後就出現了我們在遠端數據庫抓下來檔案的 commit 了,<font color='red'>但是還沒有合併喔,所以檔案還沒有同步</font> ### step4 git merge origin/main ![](https://i.imgur.com/vqkwlUs.png) 當我們在上個步驟檢查抓下來的檔案,檢查沒問題想要將第三個 commit 合併到我們本地數據庫進行同步,這時候就是使用 `git merge origin/main` 來合併 ![](https://i.imgur.com/pwqUYeQ.png) 可以看到分支已經同步了 ## git fetch 就是在避免衝突發生,可以先確認有沒有問題,如果沒有問題在進行合併 ## 再次提醒!示意圖, git fetch 下載檔案之後分支模樣 ![](https://i.imgur.com/L1QsSXg.png) 在使用 `git fetch` 之後,你可以發現左邊的本地數據庫進度跟右邊遠端數據庫一樣了,但是你的本地端分支 main 進度還沒有跟遠端數據庫分支同步,所以 `git fetch` 只是先下載檔案喔