1. 程式人生 > >git的衝突解決

git的衝突解決

衝突的產生

很多命令都可能出現衝突,但從根本上來講,都是merge 和 patch(應用補丁)時產生衝突。而rebase就是重新設定基準,然後應用補丁的過程,所以也會衝突。git pull會自動merge,repo sync會自動rebase,所以git pull和repo sync也會產生衝突。當然git rebase就更不用說了。

衝突的型別

邏輯衝突

git自動處理(合併/應用補丁)成功,但是邏輯上是有問題的。比如另外一個人修改了檔名,但我還使用老的檔名,這種情況下自動處理是能成功的,但實際上是有問題的。又比如,函式返回值含義變化,但我還使用老的含義,這種情況自動處理成功,但可能隱藏著重大BUG。這種問題,主要通過自動化測試來保障。所以最好是能夠寫出比較完備的自動化測試用例。這種衝突的解決,就是做一次BUG修正。不是真正解決git報告的衝突。

內容衝突

兩個使用者修改了同一個檔案的同一塊區域,git會報告內容衝突。我們常見的都是這種,後面的解決辦法也主要針對這種衝突。

內容衝突的解決辦法

發現衝突

一般來講,出現衝突時都會有“CONFLICT”字樣:
$ git pull
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result.但是,也有例外,repo sync的報錯,可能並不是直接提示衝突,而是下面這樣:error: project mini/sample注:無論是否存在衝突,只要本地修改不是基於伺服器最新的,它都可能報告這個錯誤,解決方法都是一樣。
這個時候,需要進入報錯的專案(git庫)目錄,然後執行git rebase解決:git rebase remote-branch-name

衝突解決的一般過程

merge/patch的衝突解決

先編輯衝突,然後git commit提交。注:對於git來講,編輯衝突跟平時的修改程式碼沒什麼差異。修改完成後,都是要把修改新增到快取,然後commit。

rebase的衝突解決

rebase的衝突解決過程,就是解決每個應用補丁衝突的過程。解決完一個補丁應用的衝突後,執行下面命令標記衝突已解決(也就是把修改內容加入快取):git add -u注:-u 表示把所有已track的檔案的新的修改加入快取,但不加入新的檔案。
然後執行下面命令繼續rebase:git rebase --continue有衝突繼續解決,重複這這些步驟,直到rebase完成。如果中間遇到某個補丁不需要應用,可以用下面命令忽略:git rebase --skip如果想回到rebase執行之前的狀態,可以執行:git rebase --abort注:rebase之後,不需要執行commit,也不存在新的修改需要提交,都是git自動完成。

編輯衝突的方法

直接編輯衝突檔案

衝突產生後,檔案系統中衝突了的檔案(這裡是test.txt)裡面的內容會顯示為類似下面這樣:a123
<<<<<<< HEAD
b789
=======
b45678910
>>>>>>> 6853e5ff961e684d3a6c02d4d06183b5ff330dcc
c其中:衝突標記<<<<<<< (7個<)與=======之間的內容是我的修改,=======與>>>>>>>之間的內容是別人的修改。此時,還沒有任何其它垃圾檔案產生。最簡單的編輯衝突的辦法,就是直接編輯衝突了的檔案(test.txt),把衝突標記刪掉,把衝突解決正確。

相關推薦

git衝突解決

方法一、 覆蓋本地 git pull 出現衝突後丟棄本地衝突檔案修改,採用遠端檔案覆蓋本地檔案 git checkout  [檔案路徑] 例:git checkout test/src/main/resources/spring-shiro.xml   方法二、

團隊合作開發git衝突解決方案 Intellij IDEA

一般在團隊合作開發一個專案的過程中,經常出現兩個人同時修改一個檔案然後都向主master提交commit,這樣就會產生衝突(conflict),那麼這種情況如何解決? 1 新建分支 如果專案的主分支是master,自己從主分支fork下來的就是屬於自己的

git 衝突解決方法

1、  衝突後文件顯示: .BASE是修改前的檔案內容 .LOCAL是本地修改後的檔案內容 .REMOTE是遠端修改後的檔案內容 2、  選中衝突檔案,右鍵編輯衝突: 3、  編輯衝突: 方法1,直接在文字處編輯 方法2,選中衝突的內容,右鍵選擇操作內容     

Git衝突解決之P4Merge

在Git使用時,經常會碰到衝突的問題,這裡介紹一個還不錯的視覺化衝突解決工具,感覺還不錯。 認識下: P4Merge 是一款非常優秀的 git merge 工具,且跨平臺相容。儘管 git 亦有內部

git 衝突解決技巧

提交版本後出現衝突如果衝突在同一行,git pull之後再提交就解決了如果衝突不在同一行 git pull之後也會有衝突git pull 之後有衝突:$ git pullremote: Counting objects: 5, done.remote: Compressing

Git配置,Ecplise如何使用Gitgit衝突解決

Git工具使用: 1.     Svn衝突:避免衝突,及時提交 2.     Git : 分散式版本控制軟體    3.     本地目錄——>暫存區——>本地分支(預設master)——>遠端分支 4.     命令: git add : 將本地

記一次git衝突解決

這次git使用中,本地做了修改並提交了commit但沒有及時push,等到別人push後沒有進行檢查直接進行了push,git自動merge然後出現了衝突。這裡記錄一下解決過程。 當時push完後沒注意git提示,開啟本地檔案發現出現了衝突的提示,具體格式是: <

git分支與版本管理、版本回退、衝突解決記錄 - 海北天藍 - 部落格園

一.基礎使用 1.初始化本地倉庫 git init 2.關聯遠端倉庫 git remote add origin [email protected]:使用者名稱/倉庫名.git 3.新增遠端倉庫檔案到本地 git pull origin master   本地自動建

git pull 之後merging衝突解決

一、出現merging衝突的原因:git遠端上存在一個本地不存在的git 分支,就是本地遠端程式碼不同步 二、解決方式: 方法一: git pull 出現衝突後可以暫存本地修改git stash ,然後git pull 更新程式碼,git stash list 可檢視暫存記錄列表,釋放本地暫存 

git分支的合併和衝突解決

原文:   http://gitbook.liuhui998.com/3_3.htmlhttp://gitbook.liuhui998.com/5_3.html 一、如何分支的合併 在git中,可以使用git merge 和git rebase兩個命令來進行

mzy git學習,分支衝突,以及衝突解決(五)

衝突解決: 先嚐試製造衝突: 首先我:git checkout -b mzy 建立一個mzy的分支 然後在其中修改readme.txt檔案,隨便加上一點東西。 vim readme.txt   write... wq 然後: git add r

SourceTree + Beyond Compare解決Git衝突的方法

採用視覺化SourceTree外掛beyondCompare解決衝突 1、構造衝突 (1)修改了server.xml檔案的第40行內容並且提交推送到遠端庫上; (2)另外一個工作目錄下也修改了該檔案的低40行內容,並且也要推送到遠端庫上去; 推送的時候出現如下問題: git

Git 衝突是如何產生的及如何解決衝突

版權宣告:歡迎轉載,轉載請說明出處http://csdn.yanxml.com。Github專案地址https://github.com/SeanYanxml/bigdata。 https://blog.csdn.net/u010416101/article/details/60784811 G

Git程式碼衝突解決辦法

如果伺服器上的檔案發生了更改了的話,在本地更改該檔案之前未使用git pull命令的話,那麼在本地修改完該檔案後使用git pull 或者git push時會發生衝突: error: Your local changes to the following files would be overw

Git-上傳衝突解決方法

報錯內容: failed to push some refs to '[email protected]:Sunpro108/Sunpro_Blog.git' hint: Updates were rejected because the remote contains wor

git patch 衝突解決

1 git patch生成方法 git format-patch commit-id commit-id 該次提交之後的所有patch,不包含commit-id這次提交 git format-patch commit-id1..commit_id2 commit-id1和commit-id2

eclipse中關於Git衝突解決辦法

eclipse關於Git版本控制的衝突解決辦法 1.為何出現衝突 當專案中不同的使用者對於同一個檔案進行了修改,在修改之前沒有進行pull操作。比如A和B兩個使用者對page.jsp檔案的修改。 A修改了一部分 B修改了一部分,其中B進行了提交push到遠端倉庫。此時遠端倉庫的程式碼和

Git建立和合並分支、merge分支衝突解決、rebase分支衝突解決、臨時修改 (stash)

分支的概念: 在Git中每一次的提交,Git都會把它們串成一條時間線,這條時間線就是一個分支。 在Git裡,如果我們沒有對分支進行其他操作,預設會建立一個主分支master,我們的提交都在這個master分支上。 HEAD指標指向分支名,分支名指向提交。預設情況下,HE

Git衝突解決方法【轉】 Git衝突解決方法

本文轉載自:https://www.cnblogs.com/gavincoder/p/9071959.html Git衝突與解決方法 1、git衝突的場景 情景一:多個分支程式碼合併到一個分支時; 情景二:多個分支向同一個遠端分支推送程式碼時; 實際上,push操作即是將

git conflict衝突解決

git -----pull request時候的衝突解決:             pull requeses記錄裡面檢視------------所有的commit記錄--------對比diff  和 history記錄             1)pull 對應分支到本地