[转]本地分支衝突
原文: https://w3c.hexschool.com/git/921e90ff
---------
並非每次分支合併都會一帆風順,如果剛好合併內容同時修改同一行 CODE 時,就會導致衝突。
這裡也來分享如何解決衝突,也附上本小節 Git 範例程式碼。
情境解說
dev
的c4
分支,修改了all.css
,加入了h1
樣式進去master
的c5
分支,也同樣改了all.cs
,並加入了h1
樣式
更重要的是他們改的行數是一樣的,所以必然會產生衝突。
接下來我們就 checkout 到 master
後,來合併到 dev
。
git merge dev
此時,終端機會回饋衝突訊息
❯ git merge dev
Auto-merging all.css
CONFLICT (content): Merge conflict in all.css
Automatic merge failed; fix conflicts and then commit the result.
這裡的意思是,all.css 確實發生衝突了,此時該檔案會變成 Unmerged
狀態,所以目前合併過程尚未,Git 請我們將衝突檔案解決掉後,才能順利合併。
所以這裡該怎麼做呢?我們先用 git status
觀看訊息。你會發現 all.css
目前變成 Unmerged paths
狀態。
所以接下來,我們就進入到 all.css
看看發生什麼事情了。
body{
color: red;
}
h1{
<<<<<<< HEAD
color: blue
=======
color: red
>>>>>>> dev
}
來詳細解釋下:
- 從 <<<< 到 === 的內容,意思是你當前的 HEAD 位置,依此範例,就是
master
。 - 從 === 到 >>> 就是
dev
的內容。
此時你要衡量要保留 master
還是 dev
,假使你要保留讓文字變成藍色,那就讓他變成以下程式碼。
body{
color: red;
}
h1{
color: blue
}
當儲存後,你就可以輸入 git add all.css
將它重新加入索引後,你可以使用 git status
觀察狀態。
此時的回饋就會說,您目前沒有任何衝突了,可以使用 git commit
來提交。於是我們就輸入該指令後。就會彈跳編輯器顯示預設訊息。
Merge branch 'dev'
# Conflicts:
# all.css
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# All conflicts fixed but you are still merging.
#
# Changes to be committed:
# modified: index.html
#
Git 預設訊息裡,你也可以自己編輯相關內容,若是覺得沒問題就儲存關閉,本次合併就完成了!
也附上 Sourcetree 提供參考。
流程回顧
- checkout 到
master
後,輸入git merge dev
- 發生衝突,
all.css
變成Unmerged
狀態 - 修改
all.css
後,重新加入到索引git add all.css
- 透過
git status
指令觀察,是否可以重新提交 - 輸入
git commit
提交,並撰寫 commit 訊息,完成本次合併
小結
通常在衝突上,不會只有單一檔案或某一行程式碼。可能會出現一個檔案會有多處衝突地方,或者是兩個檔案有衝突,此時就依照上面步驟調整好後,再依序加入索引就沒問題了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
2019-05-10 go包中的init() 函数
2018-05-10 【转】docker安装PostgreSQL
2017-05-10 javascript 时间格式(很方便的原生函数)
2016-05-10 git 以及 github 使用系列