這篇文章是針對git版本控制和工做流的總結,若是有些朋友以前還沒使用過git,對git的基本概念和命令不是很熟悉,能夠從如下基本教程入手:html
基本概念Git是什麼?git
Git是分佈式版本控制系統,與SVN相似的集中化版本控制系統相比,集中化版本控制系統雖然可以令多個團隊成員一塊兒協做開發,但有時若是中央服務器宕機的話,誰也沒法在宕機期間提交更新和協同開發。甚至有時,中央服務器磁盤故障,恰巧又沒有作備份或備份沒及時,那就可能有丟失數據的風險。github
但Git是分佈式的版本控制系統,客戶端不僅是提取最新版本的快照,並且將整個代碼倉庫鏡像複製下來。若是任何協同工做用的服務器發生故障了,也能夠用任何一個代碼倉庫來恢復。並且在協做服務器宕機期間,你也能夠提交代碼到本地倉庫,當協做服務器正常工做後,你再將本地倉庫同步到遠程倉庫。服務器
爲何要使用Git有關以上特性的詳細解釋,請查看Pro git的git基礎章節分佈式
Git基本工做流程git add
命令對修改後的文件快照,保存到暫存區域git commit
命令提交更新,將保存在暫存區域的文件快照永久轉儲到 Git 目錄中關於具體如何使用自動補全和命名別名技巧,請查看Pro git的技巧和竅門ide
Git版本控制建立倉庫工具
git init
git clone
git config
保存修改學習
git add
git commit
查看倉庫測試
git status
git log --oneline
撤銷修改fetch
查看以前的commit
git checkout <commit> <file>
git checkout <commit>
git checkout <branch>
撤銷公共修改
git revert <commit>
撤銷本地修改
git reset
git clean
重寫Git歷史記錄
git commit --amend
git rebase
git reflog
分支
git branch
git checkout
git merge
倉庫同步
git remote
git fetch
git pull
git push
因爲git擁有強大的分支特性,它的工做流比較靈活而缺少約束,因而參考Atlassian Git Tutorial的Comparing Workflows章節提供四種Git工做流:
以上工做流只是參考指南,而不是具體規則。你能夠根據本身實際狀況來選擇適合本身的工做流或微調來知足本身的須要。
Centralized Workflow過渡到分佈式版本控制系統看起來像一個艱鉅的任務,但若是你充分利用好git的話,你沒必要改變你既有的工做流,你的團隊能夠採用與以前使用SVN同樣的方式來開發項目。
如何工做
Centralized Workflow
git clone
git add
和git commit
git fetch
和gitrebase
或git pull --rebase
git push
管理衝突
File Conflicts
git status
和git add
來手動解決合併時衝突。Feature Branch Workflow的主要思想就是在開發每一個功能時都應該建立一個獨立的分支而不僅是使用主分支。因爲每一個分支是獨立且互不影響,這就意味着主分支不會包含broken code,對持續集成環境是頗有幫助的。
如何工做
Feature Branch Workflow
git checkout -b
git push
Pull Request
Pull request是一種當開發者完成一個新功能後向其餘團隊成員發送通知的機制。它的使用過程以下:
Pull request on Github
Feature Branch Workflow是一種很是靈活的開發方式。對於一些規模比較大的團隊,最好就是給特定的分支賦予不一樣的角色。除了功能分支(feature branch),Gitflow Workflow還使用獨立的分支來準備發佈(preparing),維護(maintaining), 和記錄版本(recording releases)。下面我會逐個介紹這個幾個分支:Historical Branches、Feature Branches、Release Branches和Maintenance Branches。
Historical Branches
Historical Branches
Feature Branches
Feature Branches
Release Branches
Release Branches
Maintenance Branches
Maintenance Branches.png
標記Tags
使用兩個命令來給master分支標記版本號:
git tag -a 0.1 -m "Initial public release" master
git push origin master --tags
Forking Workflow與以上討論的工做流很不一樣,一個很重要的區別就是它不僅是多個開發共享一個遠程倉庫(central repository),而是每一個開發者都擁有一個獨立的服務端倉庫。也就是說每一個contributor都有兩個倉庫:本地私有的倉庫和遠程共享的倉庫。
Forking Workflow
Forking Workflow這種工做流主要好處就是每一個開發者都擁有本身的遠程倉庫,能夠將提交的commits推送到本身的遠程倉庫,但只有工程維護者纔有權限push提交的commits到官方的倉庫,其餘開發者在沒有受權的狀況下不能push。Github不少開源項目都是採用Forking Workflow工做流。
如何工做
Fork official repository.png