場景:
假設現在基於遠端分支「origin」,建立了乙個叫「mywork」的分支,遠端分支上已經有了兩個提交。
現在我們在mywork分支上做了兩次修改並且提交。此時有兩次提交。同時origin分支上也做了一些修改,並且做了提交,這裡假定為兩次。此時示意圖如下:
現在的話兩個分支就叉開了,如果在兩個分支上修改了同一地方的**的話,此合併**會發生衝突,而解決衝突的方式有兩種,下面對兩種方式進行分析與對比。
方式一:使用git merge
git merge 會把兩個分支的**進行合併,使結果看起來像一次新的合併提交。
相關操作如下:
git merge master
手動修改衝突的部分
git add 修改的類的路徑
git commit -am "fix conflict" 寫上注釋
git merge master 最後檢查下是否merge成功
方式二:使用git rebase
git rebase會把「mywork」分支裡的每乙個提交取消掉,並且把它們臨時儲存為布丁,然後把「mywork」分支更新為最新的「origin」分支,最後把儲存的這些布丁應用到「mywork」分支上。
相關操作如下:
git checkout mywork
git rebase origin
手動修改衝突部分
git add 修改的類的路徑
git rebase --continue (此時git會繼續應用餘下的補丁)
當然任何時候都可以使用git rebase
--abort來終止rebase行動,此時會回退到rebase開始前的狀態。
兩種方式的區別:
兩種方式的區別主要體現在commit的順序上。
假設c3提交於8:00am,c5提交於9:00am,c4提交於10:00am,c6提交於11:00am,
對於使用
git merge
來合併所看到的commit的順序(從最近到之前)是:
c7 ,c6,
c4,c5,c3
,c2,c1
對於使用
git rebase
來合併所看到的commit的順序(從最近到之前)是:
c7 ,
c6',c5'
,c4,c3,
c2,c1
因為c5'、c6'提交只是c5、c6提交的轉殖,所以
使用git rebase
來合併後所看到的commit的順序(從最近到之前)是:
c7 ,
c6,c5
,c4,c3
,c2,c1
git 找到衝突 git 衝突解決
用git pull來更新 的時候,遇到了下面的問題 出現這個問題的原因是其他人修改了 php並提交到版本庫中去了,而你本地也修改了 php,這時候你進行git pull操作就好出現衝突了,解決方法,在上面的提示中也說的很明確了。1 保留本地的修改 的改法 1 直接commit本地的修改 也一般不用這...
git衝突解決
2年前 2013 08 09 10564瀏覽 同事在使用git pull 時,經常會碰到有衝突的情況,提示如下資訊 error your local changes to c environ.c would be overwritten by merge.aborting.please,commit...
git解決衝突
一 當發生以下三種情況時,git會自動進行合併 1.修改不同的檔案 2.修改相同檔案的不同區域 3.同時更改檔名和檔案內容 二 邏輯衝突 自動合併成功執行後,並不一定意味著萬事大吉,在某些特殊情況下,確存在者邏輯衝突。假如乙個使用者修改了函式返回值,但是,另外乙個使用者仍然使用舊的返回值,雖然成功合...