Git 基本指令架構圖

// Git 基本指令架構圖 ▲

解決本地端衝突

commit 衝突 : 兩個 commit 在合併時,檔案裡的某一行有重複修改到時,就會觸發。請看下方白話解說 ↓

狀況 : 當 master 與名為 dev 的 branch 都修改了同樣的東西 ( 例如 : h1 標籤 ) ,並執行 git add .git commit -m"修改內容"

實作演練

#01 本地端新增專案, commit 到本地數據庫

  • 新專案 ( hello1110 ) 中新增 index.html 並建立環境。
  • index.html 內新增標題 <h1>標題一</h1><h2>標題二</h2>,commit 至本地數據庫。
  • 目前 HEAD 在 master
$ cd 專案路徑
$ git init
$ git add .
$ git commit -m "add title"

#02 新增分支,於 HTML 中新增內容並 commit 到本地數據庫

  • 新增分支 dev → 轉換到 dev → index.html 中修改 <h1>標題一 dev</h1>,commit 至本地數據庫。
  • 目前 HEAD 在 dev
$ git branch dev
$ git checkout dev
$ git add .
$ git commit -m "add dev h1"

#03 HEAD 轉換到 master ,修改到和 dev 分支一樣的資訊

  • 轉換到 master → index.html 中修改 <h1>標題一 master</h1>,commit 至本地數據庫。
$ git checkout master   
//會發現 index.html 內的 <h1>標題一 dev</h1> 變回 <h1>標題一</h1> ▲

$ git add .
$ git commit -m "add master h1"

#04 把分支 master 與 dev 做合併 ( merge )

  • 目前 HEAD 於 master 上,在 Git 上把分支 master 與 dev 做合併。執行指令 git merge dev,會看到下方錯誤訊息 :
    • 因為這兩個 branch 皆更改了同個地方 h1 部分,引發衝突 。
Auto-merging index.html 
CONFLICT (content): Merge conflict in index.html 
Automatic merge failed; fix conflicts and then commit the result.  

語意 :
自動合併了 index.html檔案
衝突(內容):index.html 這檔案合併有衝突產生
合併出錯,要先解決衝突才能繼續commit

排解衝突方式

先到 VSCode 處理完衝突,再到 Git 做 add 與 commit。

VSCode

  • 於本地端專案打開 index.html 在衝突處會出現下面三個選項 ,依需求自行點選即可;也可直接在 VSCode 直接刪掉不要的儲存。 這邊選取 " 接受當前變更 Accept Current Change "
    • 接受當前變更 Accept Current Change | 接受來源變更 Accept Incoming Change | 接受兩者變更 Accept Both Changes

Git 發PR產生衝突解決辦法_01

Git

  • git add . ( 如果要上傳單一資料亦可輸入檔案名稱,例如 : git add index.html )
  • git commit -m "修改名稱"git commit

Git 發PR產生衝突解決辦法_02

// git status 會看到訊息表示 要先處理完 index.html 才能做 add 和 commit ▲

在不同分支 ( branch ) 要做修改時,切記一定要下指令回到那個分支 ( git checkout 分支 ) 才能做修改。

Sourcetree 圖解

分支 master 與 dev 各做 add 與 commit 。

Git 發PR產生衝突解決辦法_03

分支 master 與 dev 合併,產生衝突。

  • 上方合併區域顯示 Uncommitted changes 表示目前衝突的檔案位置於工作目錄區 ( 本地端專案資料夾內 )。
  • 可見右下方綠色區塊分別有衝突 → master 與 dev 兩分支更改到一樣的地方 h1。

Git 發PR產生衝突解決辦法_04

分支 master 與 dev 合併衝突解決,合併成功 !

Git 發PR產生衝突解決辦法_05

解決遠端衝突

實作演練 01

環境 : A、B 兩開發者一起協做於GitHub ,只有一個分支 master 。

  1. A 於 GitHub 開一個 repository 並做了資料 push 至 GitHub 遠端數據庫。
  2. B 更新了 line6 並比 A 早 push 到遠端數據庫。
  3. A 同樣也更新了 line6 ,要 push 上遠端後發現推不上去。
    • 因為和 B 做了相同的更新 & B 比 A 早推上遠端數據庫,所以發生衝突推不上去。
  4. A 需要先 pull 下本地數據庫解決衝突 ( 本地端解決衝突的方式,可看上方步驟 ) ,才能再 push 上去遠端數據庫。
    • git pull
  5. 本地端解決衝突後,執行下方指令推到遠端數據庫。
$ git add .
$ git commit -m"修改內容"  或 $ git commit 
$ git push origin master

實作演練 01 的圖片解析

步驟 3 , A 於 Git 要推更新的資料上遠端數據庫,會顯示下方產生衝突的訊息

  • 語意 : GitHub 遠端數據庫已有較新的資料,所以必須先從 GitHub 遠端數據庫 pull 資料到本地數據庫。

Git 發PR產生衝突解決辦法_06

步驟 4, A 要從遠端數據庫把資料抓下來本地端

  • 輸入指令 git pull ,從遠端數據庫下載到本地端。
  • 打開 VSCode 會看到衝突畫面,如果只留 A 更新的 line6 選取 → accept current change ,HEAD ( 綠區塊 ) 資料就會蓋過 2e399a90 ( 藍區塊 ),儲存。衝突解決

Git 發PR產生衝突解決辦法_07

Git 發PR產生衝突解決辦法_08

指令 clone 與 pull 的差異

  • 專案你是第一次看到,想要下載到你的電腦裡,請使用 clone 指令。
  • 如果你已經下載回來了,你只是想要更新最新的線上版內容,請使用 pull ( 或 Fetch ) 指令。

資料來源

高見龍 – 從伺服器上取得 Repository

最後修改日期: 9 月 25, 2020

作者

留言

撰寫回覆或留言

發佈留言必須填寫的電子郵件地址不會公開。