Git實戰(五)| 讓工作更高效,搞定Git的分支管理
先以GitLab上的一張經典的圖打頭,作為一個總體概覽,也方便理解分支的管理和走向:
場景預設
現假設公司有名為Hogwarts_Online2的開發專案,其中包含了上線分支master
,開發分支develop
,測試分支release
,和個人開發的特性分支<feature branch>
特性分支與develop分支
1.1)與遠端倉庫建立連線,在本地建立自己的分支,並拉取develop分支的檔案:
1.2)在當前分支中建立新的檔案gitflowDemo.txt
add
,commit
#修改分支
vi gitflowDemo.txt
#提交修改
git add gitflowDemo.txt
git commit -m "add demo"
1.3) 通過git pull
命令檢查遠端develop分支是否和當前分支有衝突:
$ git pull origin develop
From ssh://47.95.238.18:10022/root/hogwarts_online2
* branch develop -> FETCH_HEAD
Already up to date.
注: push之前先拉去遠端程式碼,以防在開發過程中,遠端被別人更新過新版本程式碼。如有程式碼衝突,兩人協商衝突解決辦法。多人開發的時候,衝突是不可避免的。
1.4) git push
將修改推至遠端特性分支origin gitflowDemo
:
1.5) 在GitLab上進行merge request
,並在develop分支上進行merge
:
如果想要撤回這次merge可用`git merge --abort`
create merge request:
選擇develop分支:
沒有衝突,可直接merge:
最終我們可以看到成功merge
進develop分支中:
我們還可以在graph
中檢視分支的走向:
這樣,特性分支和develop分支的程式碼拉取與合併就完成了
另外,工作中develop分支可能是許可權比較開放的,允許push的,這時候我們就可以在本地直接修改merge然後push到遠端develop中
修改gitflowDemo.txt檔案為
study git
update
add
,commit
,push
git add gitflowDemo.txt
git commit -m "update gitflowDemo.txt"
git push -u origin gitflowDemo
切換到本地develop
分支,pull
最新程式碼,merge
本地gitflowDemo
分支程式碼,push
進遠端develop
分支
git checkout develop
git pull origin develop
git merge gitflowDemo
git push -u origin develop
這個是在GitLab上檢查更新情況:
release分支
develop
分支變動頻繁,master
分支屬於上限版本,因此需要一個內測的分支版本,這個就是release
分支了
具體的提交操作根據許可權範圍,和1中develop的操作一致。
hotfixes
有的時候出現的非常緊急的bug,需要立即修改上線,來不及在各個分支上進行merge
測試了;這個就是就需要用hotfixes
模式,建立一個bugfix
分支,直接繞開其他分支,修改合併到master
中。
注:這種未經測試就上線的情況很危險,本人就遇見過;之前駐場在華為裡工作的時候,組內一位開發同事修改了一兩行的程式碼,覺得不會有問題就直接跳過了我們測試,通過別人直接上線釋出了,當時我所在的組是GNSS組;結果直接導致一千多萬臺手機的定位功能有失效的風險,受到了很多投訴,影響很大;最終相關開發人員被緊急停止休假,我們測試組也十一加了七天班,為了這個小小的改動付出了不小的後果~
3.1) 建立bugfix分支,並修改檔案push到遠端分支:
git checkout master
git checkout -b bug_02fix
vi bugfix02.txtfix bug02
git commit -a -m "bug_01 fix"
git push -u origin bug_01fix
git add bugfix02.txt
git commit -m "fix bug02"
git push origin bug_02fix
3.2) 這個時候檢查GitLab,會發現多了一條從master
分支拉出來的修改bug02的分支:
3.3)最後由最終的master
許可權擁有者來進行合併。
3.4)修改了bug直接上線master
後,很有可能讓master
分支的修改已經領先其他分支了;這個時候就需要將其他分支更新,對master
分支進行合併;同時將bugfix分支刪除,儘量保證分支的整潔度。
補充
git log
git log --graph --all --decorate=short
git grep "pattern" $(git rev-list --all)
git log f13297
rebase
變基,合併分支後可以將分支走向的基準線變更,在分支很多的時候,可以簡化分支的展示,合併分支走向使流程看起來簡潔一點
git checkout feature
git rebase master
與merge後的分支走向對比:
git checkout feature
git merge master
#或者寫在一行
git merge feature master
此外,rebase還可以對提交的歷史進行修改(不常用也不建議使用)
git rebase -i HEAD~2
注意: rebase的使用規則1、不要在公用的分支上執行rebase
2、主要的分支進行保護
git diff
git diffgit diff HEAD~3git diff master develop
常見diff工具:
-
diff ——僅展示某一行的增加(+)或減少(-)
-
vimdiff ——比diff看起來要更直接
-
IDE ——強大的工具,展示清晰,使用方便
vimdiff bugfix01.txt bugfix02.txt
參考連結:
git的基本使用流程:
https://www.atlassian.com/git/tutorials/setting-up-a-repository
特性分支工作流:
https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow
gitlab工作流:
https://docs.gitlab.com/ee/workflow/gitlab_flow.html
多種工作流對比:
https://www.atlassian.com/git/tutorials/comparing-workflows
gitlab私服搭建:
https://docs.gitlab.com/omnibus/docker/
往期推薦