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