Git<一> 手工編輯沖突
阿新 • • 發佈:2018-05-10
成功 保存 don 有時 提示 沖突解決 source IE 導致
一:背景
Neo君之前在寫東西時,都是自己負責各自的模塊,沒有出現代碼拉下來沖突的情況。最近Neo君在搞一搞前端的東東,跟同事功能有些沖突,所以就難免會沖突。
所以簡單總結下,這次針對的情況是不同的用戶修改了同一文件的同一區域,合並時會遇到沖突而導致合並中斷。
Neo君之前常用的git命令(git rebase沒怎麽用過,以後有時間研究下):
- git pull
- git push
Neo君的環境:
- Mac OS
- zsh(terminal): 之前直接在IDEA裏操作的,發現還是喜歡直接敲命令行;Windows的童鞋,使用“小烏龜”可能會更方便。
解決沖突的操作了解後,依據具體的Git環境,具體的步驟會有些差異。
二:過程
執行git pull命令,提示出錯(原諒沒有截圖):
remote:Counting objects: 12,done.
...
Auto-merging com/xx/xx/Test.js
CONFLICT(content): Merge conflict in com/xx/xx/Test.js
Automatic merge failed;fix conficts and then commit the result.
使用git status 可看到該文件處於未合並狀態(僅供參考):
... #Unmerged path: # (Use "git add/rm <file>..." as appropriate to mark resolution) ...
Git通過.git目錄下的幾個文件記錄合並過程和沖突:
- .git/MERGE_HEAD 記錄所合並的提交ID
- .git/MERGE_MSG 記錄合並失敗信息
- .git/MERGE_MODE 標識合並狀態
沖突後版本暫存庫會記錄沖突文件的不同版本,git ls-files -s 查看:
100644 ea51xxxxxxxxxxxc2 1 com/xx/xx/Test.js #編號1:沖突雙方共同的祖先版本 100644 ea51xxxxxxxxxxxc2 2 com/xx/xx/Test.js #編號2:沖突文件在當前分支中修改的副本 100644 ea51xxxxxxxxxxxc2 3 com/xx/xx/Test.js #編號3:沖突文件在合並版本中修改的副本 100644 2ieotxxxxxxxxxxxbd 0 com/xx/xx/Test2.js #編號0:表示該文件沒有沖突 ...
對於暫存區中沖突文件的三個副本,了解下即可。
工作區中的版本則包含了成功的合並和沖突的合並,這個是咱們要解決的,如:
.... <<<<<<< HEAD #當前更改 const { total, pageSize, pageNum, list } = dataSourceList.result const dataSource = dataSourceList.result && dataSourceList.result.list ======= const { total, pageSize, pageNum, list } = dataSourceList.result.payload || {} const dataSource = dataSourceList.result && dataSourceList.result.payload && dataSourceList.result.payload.list >>>>>>> 6c4a4c8d79a5d9a3829bc4d729d59fb250686382 #傳入的更改 .....
然後將沖突的地方修改,如保存當前更改(根據實際操作):
.... const { total, pageSize, pageNum, list } = dataSourceList.result const dataSource = dataSourceList.result && dataSourceList.result.list .....
然後添加到暫存區,並提交
$ git add -u $ git commit -m "Merge completed:xxx"
ps: git add -u 是(git add --update的縮寫)會將文件的修改添加,有興趣的可以百度下和git add . 以及git add -A的區別。
提交完可以看到,之前說過的./git下與合並相關的文件.git/MERGE_HEAD、.git/MERGE_MSG、.git/MERGE_MODE消失。
查看暫存區:git ls-files -s,會發現三個副本也被清除了(實際上 git add執行後就沒了):
100644 ea51xxxxxxxxxxxc2 0 com/xx/xx/Test.js #編號0:表示該文件沒有沖突 100644 2ieotxxxxxxxxxxxbd 0 com/xx/xx/Test2.js #編號0:表示該文件沒有沖突 ...
三:總結
- git pull 沖突後可以使用git ls-files -s查看暫存區的三個沖突文件。(如果文件特別多可以再後面加“|grep xxx”)。
- 手動修改工作區中沖突文件的沖突內容。
- git add和 git commit
- 沖突解決,使用git push提交代碼。(可以git pull下,這次沒有沖突的提示了)
- 可以使用git ls-files -s查看暫存區的三個沖突文件消失
Git<一> 手工編輯沖突