關於解決git衝突

2021-07-15 02:50:13 字數 1663 閱讀 2290

場景:

假設現在基於遠端分支「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.同時更改檔名和檔案內容 二 邏輯衝突 自動合併成功執行後,並不一定意味著萬事大吉,在某些特殊情況下,確存在者邏輯衝突。假如乙個使用者修改了函式返回值,但是,另外乙個使用者仍然使用舊的返回值,雖然成功合...