GIT: 合併衝突-兩人同時修改同一檔案

如果A、B兩個人都在修改同一個檔案,在A同學Merge後B同學的Merge就會出現問題了,這時我們可以快速的在VSCode上解決:


當同學A、B兩個都修改了同一個檔案,且遇到都有修改到同一行的情況時,當同學A先Merged後同學B的Merge Request就會出現下面的錯誤,顯示合併衝突需要被解決

解法是另外創建一條臨時分支,並將同學A、B的衝突在這個分支解決後,將這個臨時分支與upstream/development合併

解決衝突

建立臨時分支

在VSCode中打開專案後創建一條臨時分支

git checkout -b resolve-team-conflict upstream/development

系統會回傳創建成功並且將你轉移至該臨時分支(resolve-team-conflict)上:

PS C:\git\git-practice1> git checkout -b resolve-team-conflict upstream/development
branch 'resolve-team-conflict' set up to track 'upstream/development'.
Switched to a new branch 'resolve-team-conflict'

此時去Fork中看會發現變成 ✔️resolve-team-conflict

接著建立mr-member-b 分支並把正在MR的B同學拉到 mr-member-b 分支

git fetch upstream merge-requests/<MR_ID>/head:mr-member-b

MR ID為GitLab上,該筆MR左下角的數字

PS C:\git\git-practice1> git fetch upstream merge-requests/4/head:mr-member-b
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 3 (delta 1), reused 1 (delta 1), pack-reused 2 (from 1)
Unpacking objects: 100% (3/3), 300 bytes | 27.00 KiB/s, done.
From https://gitlab.com/git-course11/git-practice1
* [new ref] refs/merge-requests/4/head -> mr-member-b

合併雙方程式碼

因為A同學已經被Merge,所以我們先將upstream/development上的東西merge進這條分支

git merge upstream/development

接著我們再把B同學的內容merge進resolve-team-conflict

PS C:\git\git-practice1> git merge mr-member-b
Auto-merging README.md
CONFLICT (content): Merge conflict in README.md
Automatic merge failed; fix conflicts and then commit the result.

此時VSCode就會出現 >>> , <<< , === 符號

再根據情況選擇要接受哪種變更即可!!

結束衝突

接著要將 resolve-team-conflict 合併到 upstream/development

# 1. 告訴 Git 這個檔案我修好了
PS C:\git\git-practice1>  git add README.md    

# 2. 完成合併提交 (Commit)
PS C:\git\git-practice1> git commit -m "Merge: resolve README.md conflict between member A and B"

git push origin resolve-team-conflict

Push成功後就可以去GitLab將同學B的MR關掉並發送 MR 啦!!

Leave a Reply

Your email address will not be published. Required fields are marked *