1、分支管理: git
分支在實際中有什麼用呢?假設你準備開發一個新功能,可是須要兩週才能完成,第一週你寫了50%的代碼,若是馬上提交,因爲代碼還沒寫完,不完整的代碼庫會致使別人不能幹活了。若是等代碼所有寫完再一次提交,又存在丟失天天進度的巨大風險。如今有了分支,就不用怕了。你建立了一個屬於你本身的分支,別人看不到,還繼續在原來的分支上正常工做,而你在本身的分支上幹活,想提交就提交,直到開發完畢後,再一次性合併到原來的分支上,這樣,既安全,又不影響別人工做。 安全
1. 建立與合併分支: app
1)建立dev分支,而後切換到dev分支:git checkout命令加上-b參數表示建立並切換,而後,用git branch命令查看當前分支。git branch命令會列出全部分支,當前分支前面會標一個*號。而後,就能夠在dev分支上正常提交。 spa
$ git checkout -b dev
2)
切換回master
分支後,提交在dev分支上的內容並無添加到master分支上,
把dev
分支的工做成果合併到master
分支上:git merge
命令用於合併指定分支到當前分支。
3)合併完成後,就能夠放心地刪除dev分支了: 指針
$ git branch -d dev
4)
由於建立、合併和刪除分支很是快,因此Git鼓勵你使用分支完成某個任務,合併後再刪掉分支,這和直接在master
分支上工做效果是同樣的,但過程更安全。
查看分支:git branch code
刪除分支:git branch -d <name> orm
合併某分支到當前分支:git merge <name> 開發
建立+切換分支:git checkout -b <name> rem
切換分支:git checkout <name> 同步
建立分支:git branch <name>
2、解決衝突
1. 分支管理策略:一般,合併分支時,若是可能,Git會用Fast forward模式,但這種模式下,刪除分支後,會丟掉分支信息。
若是要強制禁用Fast forward模式,Git就會在merge時生成一個新的commit,這樣,從分支歷史上就能夠看出分支信息。
$ git merge --no-ff -m "merge with no-ff" dev
在實際開發中,咱們應該按照幾個基本原則進行分支管理:
首先,master分支應該是很是穩定的,也就是僅用來發布新版本,平時不能在上面幹活;
那在哪幹活呢?幹活都在dev分支上,也就是說,dev分支是不穩定的,到某個時候,好比1.0版本發佈時,再把dev分支合併到master上,在master分支發佈1.0版本;
你和你的小夥伴們每一個人都在dev分支上幹活,每一個人都有本身的分支,時不時地往dev分支上合併就能夠了。
2. bug分支:當接到一個修復一個代號101的bug的任務時,很天然地想建立一個分支issue-101來修復它,可是,等等,當前正在dev上進行的工做尚未提交,Git提供了一個stash功能,能夠把當前工做現場「儲藏」起來,等之後恢復現場後繼續工做。($git stash),bug修復完成以後能夠回到dev分支使用一下命令恢復工做現場:
另外一種方式是用git stash pop,恢復的同時把stash內容也刪了
$ git branch -D feature-vulcan
4. 遠程:當從遠程倉庫克隆時,實際上Git自動把本地的master分支和遠程的master分支對應起來了,而且,遠程倉庫的默認名稱是origin。要查看遠程庫的信息,用git remote。
$ git push origin master
並非必定要把本地分支往遠程推送:
master分支是主分支,所以要時刻與遠程同步;
dev分支是開發分支,團隊全部成員都須要在上面工做,因此也須要與遠程同步;
bug分支只用於在本地修復bug,就不必推到遠程了,除非老闆要看看你每週到底修復了幾個bug;
feature分支是否推到遠程,取決於你是否和你的小夥伴合做在上面開發。
$ git checkout -b dev origin/dev
如今,他就能夠在dev上繼續修改,而後,時不時地把dev分支push到遠程。 $ git push origin dev
推送失敗,由於你的小夥伴的最新提交和你試圖推送的提交有衝突,解決辦法也很簡單,Git已經提示咱們,先用git pull把最新的提交從origin/dev抓下來,而後,在本地合併,解決衝突,再推送。 $ git pull
$ git branch --set-upstream dev origin/dev
5. 多人協做的工做模式一般是這樣:
首先,能夠試圖用git push origin branch-name推送本身的修改;
若是推送失敗,則由於遠程分支比你的本地更新,須要先用git pull試圖合併;
若是合併有衝突,則解決衝突,並在本地提交;
沒有衝突或者解決掉衝突後,再用git push origin branch-name推送就能成功!
若是git pull提示「no tracking information」,則說明本地分支和遠程分支的連接關係沒有建立,用命令git branch --set-upstream branch-name origin/branch-name。
3、標籤管理:發佈一個版本時,一般先在版本庫中打一個標籤,這樣,就惟一肯定了打標籤時刻的版本。未來不管何時,取某個標籤的版本,就是把那個打標籤的時刻的歷史版本取出來。因此,標籤也是版本庫的一個快照。
Git的標籤雖然是版本庫的快照,但其實它就是指向某個commit的指針(可是分支能夠移動,標籤不能移動)