本節書摘來自異步社群《git學習指南》一書中的第1章,第1.3節,作者: 【德】rené preißel(普萊貝爾) , bjørn stachmann(斯拉赫曼)著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
對于大多數版本控制系統來說,分支的建立與合并通常會因其特殊性而被認為是進階拓展操作。但由于git最初就是為了友善那些散落在世界各地的linux核心開發者而建立的,合并多方努力的結果一直都是其面臨的最大挑戰之一,是以git的設計目标之一就是要讓分支的建立與合并操作變得盡可能地簡單且安全。
在下面的圖1.4中,我們向你展示了開發者是如何通過建立分支的方式來進行并行開發的。圖中的每一個點都代表了該項目的一個版本(即commit)。而由于在git中,我們隻能對整個項目進行版本化,是以每個點同時也代表了屬于同一版本的各個檔案。

圖1.4 因開發者的并行開發而出現的分支建立操作
如上所示,圖中兩位開發者的起點是同一個版本。之後兩人各自做了修改,并送出了修改。這時候,對于這兩位開發者各自的版本庫來說,該項目已經有了兩個不同的版本。也就是說,他們在這裡建立了兩個分支。接下來,如果其中一個開發者想要導入另一個人的修改,他/她就可以用git來進行版本合并。如果合并成功了,git就會建立一個合并送出,其中會包含兩位開發者所做的修改。這時如果另一位開發者也取回了這一送出,兩位開發者的項目就又回到了同一個版本。
在上面的例子中,分支的建立是非計劃性的,其原因僅僅是兩個開發者在并行開發同一個軟體罷了。在git中,我們當然也可以開啟有針對性的分支,即顯式地建立一個分支(見圖1.5)。顯式分支通常主要用于協調某一種功能性的并行開發。
圖1.5 針對不同任務的顯式分支
版本庫在執行拉回和推送操作時,可以具體指定其針對的是哪一些分支。當然,除了這些簡單的分支建立和合并處理外,我們也可以對分支執行以下動作。
移植分支:我們可以直接将某一分支中的送出轉移到另一個版本庫中。
隻傳送特定修改:我們可以将某一分支中的某一次或某幾次送出直接複制到另一個分支中。這就是所謂的撿取處理。
清理曆史:我們可以對分支曆史進行改造、排序和删除。這有利于為該項目建立更好的曆史文檔。我們稱這種處理為互動式重訂(interactive rebasing)。