柚子快報邀請碼778899分享:Git 解決分支沖突
柚子快報邀請碼778899分享:Git 解決分支沖突
一、前言
一直習(xí)慣于 add commit push 的三步走,偶然間看到了一個評論說在 push 之前還有一個 pull,小小的疑問就埋在了我的心里。于是我就先了解了 pull 的工作原理,就是先拉取代碼(fetch)再合并分支(merge)的過程,簡而言之就是在本地進行項目編寫時,他人也在其他地方進行項目編寫并且提前進行了 push 操作,使得當前的云端文件比我克隆下來的文件版本更加新,那么進行合并就會因為沖突被拒絕(rejected)。因此才需要先更新項目(pull),再進行我的 push。那么問題來了,如果別人編寫的內(nèi)容與我編寫的內(nèi)容在源文件的同一個地方,那不就出問題了嗎?!于是有了這篇文章
二、項目演示
我們通過 github 上的 Network 進行可視化講解。假設(shè)現(xiàn)在我們有一個本地項目、github 空倉庫、本地倉庫提交記錄,如下
第一次 push 后,我們查看 Network 效果如下:
已知 test.md 文件中內(nèi)容現(xiàn)在是這樣的
2.1 沒有沖突時
現(xiàn)在我們在本地對 test.md 文件進行編輯,編輯后如下:
然后在 github 上對該文件的 其他地方 進行編輯并 push,模擬 別人更早更新項目代碼但是不沖突 的情況,如下:
現(xiàn)在我們在本地進行提交操作,顯然會報錯,因為遠程已經(jīng)更新:
現(xiàn)在我們需要進行合并,也就是執(zhí)行 pull,再 push 即可,由于合并后會產(chǎn)生一個新的結(jié)點,因此會彈出 vim 界面讓你編寫 comment:
然后就成功 pull 了代碼,之后再 push 就沒問題了:
我們來看一下現(xiàn)在的 test.md 是什么樣的:
可以發(fā)現(xiàn)內(nèi)容進行了合并,現(xiàn)在的 Network 圖如下:
2.2 有沖突時
為了更加直觀的展示,我們在原有的基礎(chǔ)上多增加幾個正常結(jié)點,當前 Network 如下:
然后我們在本地對 test.md 文件進行編寫:
然后在 github 上對該文件的 相同地方 進行編輯并 push,模擬 別人更早更新項目代碼但是發(fā)生沖突 的情況,如下:
然后 add、commit,在視圖 pull 進行合并時,出現(xiàn)了問題:
提示我們修復(fù)沖突后再進行 commit,同時分支名變成了 main|MERGING 狀態(tài),本地試圖 push 的代碼也出現(xiàn)了變化,如下:
我們也可以使用 git diff 或 git status 來查看沖突:
其中,<<<<<<< 和 ======= 之間是 HEAD 的代碼,======== 和 >>>>>>> 之間是 main 的代碼,git 對沖突內(nèi)容主動進行了錯位,我方最新內(nèi)容在上(也就是 HEAD 的代碼),分支最新內(nèi)容在下,確保不會再沖突。我們根據(jù)實際情況解決沖突內(nèi)容,如下:
然后我們重新 commit 并加上 -a 參數(shù)后,進行 push:
最終 test.md 內(nèi)容如圖:
最終 Network 如圖:
三、總結(jié)
總的來說,就兩句話
當我的改動與最新項目的改動沒有重疊時:pull 后就直接進行合并當我的改動與最新項目的改動有重疊時:pull 后解決沖突,然后執(zhí)行下方命令即可
git commit -a -m '
柚子快報邀請碼778899分享:Git 解決分支沖突
好文鏈接
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。
轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。