W3Cschool
恭喜您成為首批注冊用戶
獲得88經驗值獎勵
讓我們來看一個簡單的分支新建與分支合并的例子,實際工作中你可能會用到類似的工作流。你將經歷如下步驟:
開發(fā)某個網站。
為實現(xiàn)某個新的需求,創(chuàng)建一個分支。
正在此時,你突然接到一個電話說有個很嚴重的問題需要緊急修補。你將按照如下方式來處理:
切換到你的線上分支(production branch)。
為這個緊急任務新建一個分支,并在其中修復它。
在測試通過之后,切換回線上分支,然后合并這個修補分支,最后將改動推送到線上分支。
首先,我們假設你正在你的項目上工作,并且已經有一些提交。
master 分支所指向的提交是你當前提交(有關 hotfix 的提交)的直接上游,所以 Git 只是簡單的將指針向前移動。換句話說,當你試圖合并兩個分支時,如果順著一個分支走下去能夠到達另一個分支,那么 Git 在合并兩者的時候,只會簡單的將指針向前推進(指針右移),因為這種情況下的合并操作沒有需要解決的分歧——這就叫做 “快進(fast-forward)”。
現(xiàn)在,最新的修改已經在 master
分支所指向的提交快照中,你可以著手發(fā)布該修復了。
任何因包含合并沖突而有待解決的文件,都會以未合并狀態(tài)標識出來。Git 會在有沖突的文件中加入標準的沖突解決標記,這樣你可以打開這些包含沖突的文件然后手動解決沖突。出現(xiàn)沖突的文件會包含一些特殊區(qū)段,看起來像下面這個樣子:
<<<<<<< HEAD:index.html
<div id="footer">contact : email.support@github.com</div>
=======
<div id="footer">
please contact us at support@github.com
</div>
>>>>>>> iss53:index.html
這表示 HEAD
所指示的版本(也就是你的 master
分支所在的位置,因為你在運行 merge 命令的時候已經檢出到了這個分支)在這個區(qū)段的上半部分(=======
的上半部分),而 iss53
分支所指示的版本在 =======
的下半部分。為了解決沖突,你必須選擇使用由 =======
分割的兩部分中的一個,或者你也可以自行合并這些內容。例如,你可以通過把這段內容換成下面的樣子來解決沖突:
<div id="footer">
please contact us at email.support@github.com
</div>
上述的沖突解決方案僅保留了其中一個分支的修改,并且 <<<<<<<
, =======
, 和 >>>>>>>
這些行被完全刪除了。在你解決了所有文件里的沖突之后,對每個文件使用 git add
命令來將其標記為沖突已解決。一旦暫存這些原本有沖突的文件,Git 就會將它們標記為沖突已解決。
如果你想使用圖形化工具來解決沖突,你可以運行 git mergetool
,該命令會為你啟動一個合適的可視化合并工具,并帶領你一步一步解決這些沖突:
$ git mergetool
This message is displayed because 'merge.tool' is not configured.
See 'git mergetool --tool-help' or 'git help config' for more details.
'git mergetool' will now attempt to use one of the following tools:
opendiff kdiff3 tkdiff xxdiff meld tortoisemerge gvimdiff diffuse diffmerge ecmerge p4merge araxis bc3 codecompare vimdiff emerge
Merging:
index.html
Normal merge conflict for 'index.html':
{local}: modified file
{remote}: modified file
Hit return to start merge resolution tool (opendiff):
如果你想使用除默認工具(在這里 Git 使用 opendiff
做為默認的合并工具,因為作者在 Mac 上運行該程序)外的其他合并工具,你可以在 “下列工具中(one of the following tools)” 這句后面看到所有支持的合并工具。然后輸入你喜歡的工具名字就可以了。
如果你需要更加高級的工具來解決復雜的合并沖突,我們會在 “高級合并” 介紹更多關于分支合并的內容。
等你退出合并工具之后,Git 會詢問剛才的合并是否成功。如果你回答是,Git 會暫存那些文件以表明沖突已解決:你可以再次運行 git status
來確認所有的合并沖突都已被解決:
$ git status
On branch master
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
modified: index.html
如果你對結果感到滿意,并且確定之前有沖突的的文件都已經暫存了,這時你可以輸入 git commit
來完成合并提交。默認情況下提交信息看起來像下面這個樣子:
Merge branch 'iss53'
Conflicts:
index.html
#
# It looks like you may be committing a merge.
# If this is not correct, please remove the file
# .git/MERGE_HEAD
# and try again.
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch master
# All conflicts fixed but you are still merging.
#
# Changes to be committed:
# modified: index.html
#
如果你覺得上述的信息不夠充分,不能完全體現(xiàn)分支合并的過程,你可以修改上述信息,添加一些細節(jié)給未來檢視這個合并的讀者一些幫助,告訴他們你是如何解決合并沖突的,以及理由是什么。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: