1. 程式人生 > >IDEA中解決 git pull 衝突

IDEA中解決 git pull 衝突

0.事先準備。

1)把遠端倉庫的README.md內容改寫為bbb(原先為aaa)。

2)本地倉庫的README.md內容改寫為ccc(原先也為aaa)。

以此來模仿程式碼衝突。

1.先git add,git commit 然後pull

pull的時候會提示有衝突,需要你進行手動merge

Accept Yours 就是直接選取本地的程式碼,覆蓋掉遠端倉庫的

Accept Theirs 是直接選取遠端倉庫的,覆蓋掉自己本地的

我們選擇Merge,自己手動行進選擇、修改。

這裡左邊部分是你本地倉庫的程式碼,右邊部分是遠端倉庫的程式碼,中間的result就是你修改之後的結果。左下角的Accept Left 和

Accept Right其實就相當於是之前的 Accept Yours 和 Accept Theirs  右下角的Apply是確認合併,Abort是取消合併。

我們在result中修改好自己想要merge的程式碼,然後點選Apply。

點yes.

這樣我們就解決了衝突,解決完衝突後記得要再commit一次,分別更新本地和遠端倉庫的程式碼

這裡我們可以選擇commit and push

點選push

可以看到已經push成功了,此時我們再檢視下遠端倉庫的README.md和本地倉庫的README.md

確實都已經更新成功了。

2.有些同學喜歡先pull,再commit 和push

還是回到原來的事先準備,現在遠端倉庫的README為bbb,本地我改成ccc,這次先不commit,我們先來pull

pull的時候我們會發現右下角有提示說pull failed(這是肯定的啦,因為我們程式碼衝突了嘛)

我們選擇專案右鍵--Git--Repository--Stash Changes

在Message中隨便取個名字,然後點選Create Stash。

以上幾步的操作,其實就是把你在本地做的改變,通過stash先在git棧中儲存起來(因為你沒有commit嘛,對比先commit再pull,你會發現 先commit再pull會比較方便,(commit操作就是類似於把改變先存起來吧。。個人理解、、))。

stash完後你會發現你本地進行的一些修改都已經不存在了,README檔案也回到了之前的aaa(而不是修改後的ccc)

這樣我們就可以和遠端倉庫合併了,(我們已經把衝突先去掉了)。git pull  順利成功。

pull完以後我們檢視README.md發現此時的內容就是遠端倉庫的bbb

現在我們再把之前儲存的更改取出來

選擇專案右鍵--Git--Repository--UnStash Changes

選擇剛剛我們命名的那個更改記錄,我這裡就是第一個。

然後我們點Apply Stash,來到如下視窗,提示有程式碼衝突

有沒有覺得這個這個視窗似曾相識!!

這跟我們先commit再pull  出來的視窗一模一樣嘛!

我們直接選擇Merge

又是似曾相識的感覺,有沒有!(所以我個人感覺其實如果你沒有先commit就pull的話,你就要通過stash和unstash把改變先儲存起來然後再取出來,這一步其實就相當於commit吧(、、、我覺得這樣理解沒毛病~~))。

接下來要做的還是老樣子,我們在result中修改自己想要合併的程式碼(但是我這裡好像有個bug,result的程式碼改了之後都沒了,不知道什麼原因,之前先commit再pull到這一步就沒有這個問題。所以我是在result中把本地和遠端的程式碼都選上了)

然後我們點選Apply,把衝突解決。

別忘了commit和push。

push完我們檢視遠端倉庫和本地倉庫都更新成了bbb ccc