---
# System prepended metadata

title: 'Git #5  衝突'
tags: [Git]

---

# 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` 只是先下載檔案喔