2015年12月5日 星期六

branch(分支)和衝突 (EGIT「Eclipse 的 git 」 四)

※新增Branch

1.不一定要從最新的地方開始分支,向下面的圖是從第二次commit開啟分支


2.取一個分支的名字


3.第二張圖的checkout預設會勾起來,可以看到Local的branchTest前面有個勾,表示現在選的是這一個branch,要切換到master,只要按右鍵 Checkout即可,可以看到前面的勾又到了master了,而歷史的圖在右上角, branchTest是從第二次commit分支出來的,只有兩個歷史紀錄;而master有三個


4.我將Test.java,原本是:
public static void main(String[] args) {
// TODO Auto-generated method stub
}

改成:
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("add this line");
}

而web.xml原本是:
<welcome-file>index.html</welcome-file>

改成:
<welcome-file>index.xml</welcome-file>

然後commit之後的歷史圖如下


5.現在要合併到master,在branchTest按右鍵Merge


如果是在branchTest Checkout(也就是灰色的勾是在branchTest前面),選Merge會出現如下的畫面
Merge options:我不管選那一個都會出現※解決衝突的第一張圖
Fast forward options:分支是從master的最新版(HEAD)分出來的,也就是修改過的檔案只有分支,它給你三個選項
滑就要選master才能按Merge

6.可看到順利的合併起來了,歷史圖也很清楚


7.以結果來看Test.java和web.xml都是以改過後的版本為主
而master的第二次commit(second commit)是有Test2.java的,branchTest是從這裡分出去的,所以branchTest是有Test2.java的,而master沒有Test2.java,合併後是不會將Test2.java加進來的,這點要特別注意



※解決衝突

切換到master將Test.java的add this line改成add this line1,然後web.xml的index.xml改成index.xml1並commit
切換到branchTest將Test.java的add this line改成add this line2,然後web.xml的index.xml改成index.xml2,先不要commit

1.想再切回master時,會出現以下的視窗,因為同一隻程式裡面的code有兩種版本,有衝突了,所以不給你切換,git提供四種解決方法
.Commit:就是將修改的這兩支commit(一定會有衝突,下面會講)
.Stash:將修改後的code藏在某個地方
.Reset:回復到沒修改的狀態
.Cancel:取消,什麼都不做
Reset和Canncel就不用講了,如果選Stash,會在跳出一個Commit Stash,取個名字,那個checkbox就是說要不要包括有「?」的檔案



2.選擇Stash後,又可以自由的切換了,但branch的code是未修改前的狀態,剛剛藏在某個地方就是在這裡,想回復可以切到branchTest,然後在stash按右鍵Apply Stashed Changes,這時又不能切換了,這次選commit後,切回master
※如果不切到branchTest,又Apply Stashed Changes,就要在master解決衝突了


3.切回master後,天啊!滿江紅!
===到>>>之間,最後有寫說是branchTest的; 所以<<<HEAD到===當然就是master的了
這時就依據需求修改成正確的版本


4.修改完後,git並不知道,所以要Add to Git Index,然後該commit就commit
※如果圖3修改的結果是以master為主就不用commit(因為本來就是這樣的code);branchTest的就commit,不commit就不能checkout



沒有留言:

張貼留言