在前一篇文章中,主要針對Git本地倉庫和遠程倉庫的基本操做命令進行了簡要介紹,本文主要集中介紹Git的另外一個主要的特色:分支管理和多人協做。html
什麼是分支管理
當一個任務須要多人協做完成時,每一個人能夠建立一個屬於本身的分支,只有本身能夠看到,每一個人在本身的分支上完成修改提交等任務,最終開發完畢時,將每一個人的分支合併到原來的主分支,這樣能夠互不影響,而且保證了安全。git
建立和合並分支
在一開始,git倉庫只有一個主分支(master),HEAD指向master,master指向最新的提交;當建立了一個新的分支(好比叫dev)後,增長一個相似於master的指針dev,而且更改HEAD指向dev。安全
<div align=center>  </div>網站
這樣,當在當前分支修改時,就是在移動dev指針,最後能夠經過合併將分支合併到master分支。spa
使用命令以下: 建立分支: $ git branch <branch_name> 切換分支: $ git checkout <branch_name> 建立+切換:$ git checkout -b <branch_name> 查看當前分支: $ git branch //列出全部分支,當前分支前加* 合併某分支到當前分支: $ git merge <branch_name> 刪除分支: $ git branch -d <branch_name>
解決衝突
當Git沒法自動合併分支時,就必須首先解決衝突,解決衝突之後再提交便可完成合並。 解決衝突就是把Git合併失敗的文件手動編輯爲咱們但願的內容,而後再進行提交,使用git log --graph
能夠看到分支合併圖。指針
分支管理策略
Git的分支功能十分強大,在團隊開發中應該充分應用,合併分支時,加上--no-ff 參數就能夠用普通模式合併,合併後的歷史有分支,能夠看出來作過合併,而fast forward看不出來曾經作過合併。 團隊合做時,master分支應該相對穩定,每一個人的工做在本身的分支上完成。code
<div align=center>  </div>orm
Bug分支和Feature分支
這兩個分支主要是在軟件開發中使用。htm
- Bug分支:當要修復軟件開發中的一個Bug時,一個很好的辦法是經過建立一個新的分支來進行修復,修復完成後進行合併,刪除Bug分支,而若是當前手頭工做尚未完成時,能夠先使用命令
git stash
將工做現場進行保存,而後去分支裏修復bug,修復完成後,再經過git stash pop
恢復工做現場。 - Feature分支: 當軟件開發中臨時增長一個新功能時,一樣最好的辦法是用一個新的分支來進行開發,完成後再合併,相似於Bug分支,若是想要丟棄一個沒有被合併過的分支,能夠經過命令
git branch -D <branch_name>
來強行刪除。
多人協做
多人協做的工做模式:blog
- 首先,能夠試圖用
git push origin <branch-name>
推送本身的修改; - 若是推送失敗,則由於遠程分支比你的本地更新,須要先用
git pull
試圖合併; - 若是合併有衝突,則解決衝突,並在本地提交;
- 沒有衝突或者解決掉衝突後,再用
git push origin <branch-name>
推送就能成功!
注意:若是git pull提示no tracking information,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream-to <branch-name> origin/<branch-name>
查看遠程庫信息的命令:git remote -v
推送本地分支的命令:git push origin <branch_name>
建立和遠程庫對應分支的命令:git checkout -b branch-name origin/branch-name
Rebase
- rebase操做能夠把本地未push的分叉提交歷史整理成直線;
- rebase的目的是使得咱們在查看歷史提交的變化時更容易,由於分叉的提交須要三方對比。
標籤管理
標籤至關於版本庫的一個快照,或者說是版本號的一個別名,和某個commit綁定在一塊兒。
- 建立標籤: 命令
git tag <tagname>
用於新建一個標籤,默認爲HEAD,也能夠指定一個commit id;命令git tag -a <tagname> -m "blablabla..."
能夠指定標籤信息;命令git tag
能夠查看全部標籤。 - 操做標籤: 命令
git push origin <tagname>
能夠推送一個本地標籤;命令git push origin --tags
能夠推送所有未推送過的本地標籤;命令git tag -d <tagname>
能夠刪除一個本地標籤;命令git push origin :refs/tags/<tagname>
能夠刪除一個遠程標籤。
使用GitHub
- 在GitHub上,能夠任意Fork開源倉庫;
- 本身擁有Fork後的倉庫的讀寫權限,能夠推送pull request給官方倉庫來貢獻代碼。
總結
本文主要針對Git使用相關的分支管理和標籤管理進行了記錄,實踐出真知,多練習使用纔是最佳途徑!