1. 程式人生 > 其它 >Git實戰(五)| 讓工作更高效,搞定Git的分支管理

Git實戰(五)| 讓工作更高效,搞定Git的分支管理

上一篇講到Git的分支管理實操,線上合併和本地合併都進行了實操。畢竟:光說不練是假把式。而只練不整理,只能是傻把式了。分支管理到底如何進行管理呢?

先以GitLab上的一張經典的圖打頭,作為一個總體概覽,也方便理解分支的管理和走向:

場景預設

現假設公司有名為Hogwarts_Online2的開發專案,其中包含了上線分支master,開發分支develop,測試分支release,和個人開發的特性分支<feature branch>

特性分支與develop分支

1.1)與遠端倉庫建立連線,在本地建立自己的分支,並拉取develop分支的檔案:

1.2)在當前分支中建立新的檔案gitflowDemo.txt

,輸入內容“study git”;然後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/

往期推薦

《穿越時空的git》之建立版本庫和常用命令操作

版本控制神器GitHub的基本使用與踩坑,教你一鏟子填平!

Git 實戰(三) | Github 必會高頻基礎命令與 IDE 的 Git 

Git實戰(四)|Git分支管理實操,搞定線上合併和本地合