Git的殺手級特性--分支git
1.幾乎全部的版本控制系統都以某種形式支持分支。 使用分支意味着你能夠把你的工做從開發主線上分離開來,以避免影響開發主線。與許多其它版本控制系統不一樣,Git 鼓勵在工做流程中頻繁地使用分支與合併,哪怕一天以內進行許屢次。 理解和精通這一特性,你便會意識到 Git 是如此的強大而又獨特,而且今後真正改變你的開發方式。測試
建立新分支:$ git branch testingfetch
切換新分支:$ git checkout testing網站
提交新分支:git commit -a -m 'made other changes' 加上注視spa
運行 git log --oneline --decorate --graph --all ,它會輸出你的提交歷史、各個分支的指向以及項目的分支分叉狀況。版本控制
因爲 Git 的分支實質上僅是包含所指對象校驗和(長度爲 40 的 SHA-1 值字符串)的文件,因此它的建立和銷燬都異常高效。 建立一個新分支就至關於往一個文件中寫入 41 個字節(40 個字符和 1 個換行符),如此的簡單能不快嗎?這與過去大多數版本控制系統造成了鮮明的對比,它們在建立分支時,將全部的項目文件都複製一遍,並保存到一個特定的目錄。 完成這樣繁瑣的過程一般須要好幾秒鐘,有時甚至須要好幾分鐘。所需時間的長短,徹底決於項目的規模。而在 Git 中,任何規模的項目都能在瞬間建立新分支。 同時,因爲每次提交都會記錄父對象,因此尋找恰當的合併基礎(譯註:即共同祖先)也是一樣的簡單和高效。 這些高效的特性使得 Git 鼓勵開發人員頻繁地建立和使用分支。每次提交都會記錄父對象,即保存一次快照,便於以後將不一樣分支進行合併。指針
2.一個分支的使用例子:server
讓咱們來看一個簡單的分支新建與分支合併的例子,實際工做中你可能會用到相似的工做流。 你將經歷以下步驟:對象
1. 開發某個網站。
2. 爲實現某個新的需求,建立一個分支。
3. 在這個分支上開展工做。
正在此時,你忽然接到一個電話說有個很嚴重的問題須要緊急修補。 你將按照以下方式來處理:
1. 切換到你的線上分支(production branch)。
2. 爲這個緊急任務新建一個分支,並在其中修復它。
3. 在測試經過以後,切換回線上分支,而後合併這個修補分支,最後將改動推送到線上分支。
4. 切換回你最初工做的分支上,繼續工做。blog
你已經決定要解決你的公司使用的問題追蹤系統中的 #53 問題。 想要新建一個分支並同時切換到那個分
支上,你能夠運行一個帶有 -b 參數的 git checkout 命令: git checkout -b iss53 #建立新分支並切換到該分支,它是下面兩條命令的簡寫:
$ git branch iss53
$ git checkout iss53
如今你接到那個電話,有個緊急問題等待你來解決。 有了 Git 的幫助,你沒必要把這個緊急問題和 iss53 的修改混在一塊兒,你也不須要花大力氣來還原關於 53# 問題的修改,而後再添加關於這個緊急問題的修改,最後將這個修改提交到線上分支。 你所要作的僅僅是切換回 master 分支。可是,在你這麼作以前,要留意你的工做目錄和暫存區裏那些尚未被提交的修改,它可能會和你即將檢出的分支產生衝突從而阻止 Git 切換到該分支。 最好的方法是,在你切換分支以前,保持好一個乾淨的狀態。 有一些方法能夠繞過這個問題(即,保存進度(stashing) 和 修補提交(commit amending)),(目前的理解是進行commit保存在本地,以便於之後再check回來)。咱們會在儲藏與清理 中看到關於這兩個命令的介紹。 如今,咱們假設你已經把你的修改所有提交了,這時你能夠切換回master 分支了:
$ git checkout master
Switched to branch 'master'
能夠在master分支上新建一個分支hotfix來解決這個緊急問題,而後再切換到master分支將hotfix分支merge到master分支,此時master分支和hotfix分支指向同一個版本快照,此時能夠刪除hotfix分支了
刪除分支
而後回到以前的iss53分支,能夠把修復了hotfix問題的master分支merge到iss53分支裏,
遠程分支:遠程引用是對遠程倉庫的引用,包括分支,標籤等。
origin與master同樣並沒有特殊含義,只是克隆時系統默認的名字,能夠在克隆時進行更改。
這段能夠看數來理解,更連貫一些
clone
fetch
fetch
fetch以後不會生成一個新的serverfix分支,只會有一個不可修改的origin/serverfix指針,想要將這些工做合併到新的分支,能夠運行 git merge origin/serverfix 若是想要在本身的
serverfix 分支上工做,能夠將其創建在遠程跟蹤分支之上:(即在本地新建一個基於遠程此分支的新分支)
$ git checkout -b serverfix origin/serverfix
而後就能夠用他的代碼在本地進行開發了。
push
推送本地的 serverfix 分支,將其做爲遠程倉庫的 serverfix 分支」 能夠經過這種格式來推送本地分支
到一個命名不相同的遠程分支。 若是並不想讓遠程倉庫上的分支叫作 serverfix,能夠運行 git push
origin serverfix:awesomebranch 來將本地的 serverfix 分支推送到遠程倉庫上的 awesomebranch
分支。
前三章看完了,來實際操做練習練習。