编程 php Firefox nginx Android linux 程序员 google centos java apache 微软 Ubuntu Python mysql shell Windows wordpress 云计算 开源

与他人协作:Git版本控制系统

 在介紹分支之前,我們首先先考慮為什麽需要引入分支這個概念,究竟有哪些無法解決的問題,需要我們引入新的概念。

 在沒有分支這個概念之前,我們對於一個項目的開發只有一個進度,但是一旦發現項目的之前版本的某個節點出現bug,難道放棄到目前為止的所有開發,回退到bug節點進行修復嗎?這是第一個亟待解決的問題。

 對於我們軟件業來說,一個軟件肯定有不止一個版本,那麽你不能要求所有用戶全部升級到最新版本。那麽對於同一個項目,難道我們放棄那些仍使用舊版本的用戶,直接在原項目中開發新功能嗎?這也是一個未解決的問題。

 下面我們從解決上述問題出發,引出分支的概念。

 我們沿著一條路進行開發,head指向當前最新一次commit,整條線路我們管它叫做分支(branch),但是我們發現之前的某次提交中出現bug,我們當然可以使用reset指令回退版本,但會丟失掉很大一部分代碼。

 針對這種情況,我們可以創建一個分支用於修復bug,而主分支繼續開發,等bug修復完成之後,兩分支合並即可

 這樣在不同分支上的開發,兩個分支完全不相互影響。一條分支維護這舊版本,另一條分支開發著新功能,等到舊版本不再需要維護時,刪除該分支即可。那下面我們開始介紹分支的的相關命令。

  要分支就必然需要合並,否則新分支上的所有開發都無法影響到主分支,這是沒有意義的。所以我們往往在新分支開發結束之後往主分支上合並。下面我們首先看一種快進式(Fast Forwarld)的合並方式。

 快進式的合並就是直接將head指針快進到較遠的一個分支的最新提交,也就是說,快進式合並的兩個分支是一種從屬關系,像這樣的:

 我們在進行分支合並的時候,最常遇到的問題就是合並沖突,但是我們快進式合並是不會出現沖突的,因為兩個分支是一種從屬關系,進度慢的是進度快的一部分。下面我們看看合並時遇到沖突該如何解決。

 分支合並的沖突指的是,兩個不同的分支在各自開發過程中對相同文件進行了修改,那麽git在合並分支的時候將不知道選擇哪個分支上的修改作為該文件的修改,這樣就產生沖突了。例如,我們在工作區創建兩個分支,在兩個分支上分別對文件test進行修改,然後再合並兩分支。

延伸阅读

评论