git merge 合併分支

git merge 用來作分支合併,將其餘分支中的內容合併到當前分支中。好比分支結構以下:
html

                        master
                         /
C0 ---- C1 ---- C2 ---- C4
                         \
                         C3 ---- C5
                                  \
                                issueFix

當前分支是master
$ git checkout mastergit

把issueFix中的內容Merge進來:
$ git merge issueFixvim

若是沒有衝突的話,merge完成。有衝突的話,git會提示那個文件中有衝突,好比有以下衝突:工具

<<<<<<< HEAD:test.cspa

printf (「test1″);orm

=======htm

printf (「test2″);rem

>>>>>>> issueFix:test.cget

能夠看到 ======= 隔開的上半部分,是 HEAD(即 master 分支,在運行 merge 命令時檢出的分支)中的內容,下半部分是在 issueFix 分支中的內容。解決衝突的辦法無非是兩者選其一或者由你親自整合到一塊兒。好比你能夠經過把這段內容替換爲下面這樣來解決:it

printf (「test2″);

這個解決方案各採納了兩個分支中的一部份內容,並且刪除了 <<<<<<<,=======,和>>>>>>> 這些行。在解決了全部文件裏的全部衝突後,運行 git add 將把它們標記爲已解決(resolved)。由於一旦暫存,就表示衝突已經解決。若是你想用一個有圖形界面的工具來解決這些問題,不妨運行 git mergetool,它會調用一個可視化的合併工具並引導你解決全部衝突:

$ git mergetool
merge tool candidates: kdiff3 tkdiff xxdiff meld gvimdiff opendiff emerge vimdiff
Merging the files: index.html

Normal merge conflict for ‘test.c’:
{local}: modified
{remote}: modified
Hit return to start merge resolution tool (kdiff3):

合併後的分支圖以下:

                               master
                                 /
C0 ---- C1 ---- C2 ---- C4 ---- C6
                        \       /
                        C3 ----C5
                                \
                              issueFix

注意,此次合併的實現,因爲當前 master 分支所指向的 commit (C4)並不是想要併入分支(issueFix)的直接祖先,Git 不得不進行一些處理。就此例而言,Git 會用兩個分支的末端(C4 和 C5)和它們的共同祖先(C2)進行一次簡單的三方合併。對三方合併的結果做一新的快照,並自動建立一個指向它的 commit(C6)

退出合併工具之後,Git 會詢問你合併是否成功。若是回答是,它會爲你把相關文件暫存起來,以代表狀態爲已解決。而後能夠用 git commit 來完成此次合併提交。

相關文章
相關標籤/搜索