Git 筆記——如何處理分支合併衝突

1.前言

學習使用 Git 也有一段時間,但一直都是把 Git 看成一個代碼倉庫,使用的命令無非就是 clone, add, commit ,每每課程做業也沒有過多人合做開發,沒有體驗過 Git 的分支操做。
但在實習時,我瞭解到在實際的團隊開發中,一個新的功能每每都是在分支中進行開發,最終將開發好的代碼合併到 master 中。
合併(merging)是在形式上整合別的分支到你當前的工做分支的操做。Git 所帶來的最偉大的改善就是它讓合併操做變得很是輕鬆簡單。在大多數狀況下,Git 會本身弄清楚該如何整合這些新來的變化。
固然,也存在極少數的狀況,你必須本身手動地告訴 Git 該怎麼作。最爲常見的就是你們都改動了同一個文件。即使在這種狀況下,Git 仍是有可能自動地發現並解決掉這些衝突。可是,若是兩我的同時更改了同一個文件的同一行代碼,或者一我的改動了那些被另外一我的刪除了的代碼,Git 就不能簡單地肯定到底誰的改動纔是正確的。這時 Git 會把這些地方標記爲一個衝突,你必須首先解決掉這些衝突,而後再繼續你的工做。git

2.出現衝突

首先在主分支 master 上,又一個 readme 文件,內容以下:學習

this is a readme file.

接着新建一個分支,而且修改這個 readme 文件。this

# 新建分支並轉到這個分支
$ git checkout -b bran1
Switched to a new branch 'bran1'

修改 readme 文件以下:code

bran1: head
this is a readme file.
bran1: foot

以後提交修改開發

$ git add readme
$ git commit -m "在bran1分支下修改"

切換到 master 分支it

$ git checkout master
Switched to branch 'master'
Your branch is ahead of 'origin/master' by 1 commit.
  (use "git push" to publish your local commits)

在 master 分支上到 readme 文件,處於上一次修改以前,若是這時候將兩個分支合併,是不會出現問題的。可是,若是 master 如今也要修改 readme 文件,就會出現衝突了。
修改 readme 文件以下:ast

master: head
this is a readme file.
master: foot

提交修改file

$ git add readme
$ git commit -m "在master分支下修改"

如今 master 分支與 bran1 分支都比文章開始時都 master 分支多走了一步。這種狀況下,Git沒法執行「快速合併」,只能試圖把各自的修改合併起來,但這種合併就可能會有衝突。文件

$ git merge bran1
Auto-merging readme
CONFLICT (content): Merge conflict in readme
Automatic merge failed; fix conflicts and then commit the result.

3.衝突處理

出現了 Git 沒法自動處理的衝突,那爲了解決這種衝突,只能手動進行處理,處理方式是在發生衝突的地方進行多選一,只保留一個,那麼就能夠解決衝突。
此時打開 readme 文件,發現文件內容入下:時間

<<<<<<< HEAD
master: head
=======
bran1: head
>>>>>>> bran1
this is a readme file.
<<<<<<< HEAD
master: foot
=======
bran1: foot
>>>>>>> bran1

這裏的 <<<<<<< ,=======,>>>>>>> 標記了衝突出現的位置,咱們能夠對衝突對文本進行選擇,好比第一個衝突咱們保留 master 下對修改,第二個衝突保留 bran1 下對修改:

master: head
this is a readme file.
bran1: foot

再次提交

$ git add readme
$ git commit -m "conflict fixed"

此時衝突已經解決,提交不會出現問題。

相關文章
相關標籤/搜索