git merge 合並分支


git merge 用來做分支合並,將其他分支中的內容合並到當前分支中。比如分支結構如下:

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

當前分支是master
$ git checkout master

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

如果沒有沖突的話,merge完成。有沖突的話,git會提示那個文件中有沖突,比如有如下沖突:

<<<<<<< HEAD:test.c

printf (“test1″);

=======

printf (“test2″);

>>>>>>> issueFix:test.c

可以看到 ======= 隔開的上半部分,是 HEAD(即 master 分支,在運行 merge 命令時檢出的分支)中的內容,下半部分是在 issueFix 分支中的內容。解決沖突的辦法無非是二者選其一或者由你親自整合到一起。比如你可以通過把這段內容替換為下面這樣來解決:

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 來完成這次合並提交。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM