分支管理
master 分支
不能往master 分支上提交代碼鳞陨,只能在該分支上進行代碼合并操作婴渡,例如將其它分支的代碼合并到 Master 分支上纤控。
develop 分支
我們?nèi)粘i_發(fā)中的代碼需要從 master 分支拉一條 develop 分支出來挟裂,該分支所有人都能訪問属愤,但一般情況下号胚,我們也不會直接在該分支上提交代碼籽慢,代碼同樣是從其它分支合并到 develop 分支上去。
feature 分支
當(dāng)我們需要開發(fā)某個特性時猫胁,需要從 develop 分支拉出一條 feature 分支箱亿,例如 feature/update_mq 與 feature/update_netty,在這些分支上并行地開發(fā)具體特性弃秆。
release 分支
當(dāng)特性開發(fā)完畢后届惋,我們決定需要發(fā)布某個版本了,此時需要從 develop 分支上拉出一條 release 分支菠赚,例如 release-1.0.0脑豹,并將需要發(fā)布的特性從相關(guān) feature 分支一同合并到 release 分支上,隨后將針對 release 分支推送到測試環(huán)境衡查,測試工程師在該分支上做功能測試瘩欺,開發(fā)工程師在該分支上修改 bug。待測試工程師無法找到任何 bug 時,我們可將該 release 分支部署到預(yù)發(fā)環(huán)境俱饿,再次驗證以后歌粥,均無任何 bug,此時可將 release 分支部署到生產(chǎn)環(huán)境拍埠。
tag
待上線完成后失驶,將 release 分支上的代碼同時合并到 develop 分支與 master 分支,并在 master 分支上打一個 tag枣购,例如 v1.0.0嬉探。
hotfix
當(dāng)生產(chǎn)環(huán)境發(fā)現(xiàn) bug 時,我們需要從對應(yīng)的 tag 上(例如 v1.0.0)拉出一條 hotfix 分支(例如 hotfix-1.0.1)棉圈,并在該分支上做 bug 修復(fù)甲馋。待 bug 完全修復(fù)后,需將 hotfix 分支上的代碼同時合并到 develop 分支與 master 分支迄损。同時在master上打上tag定躏,v1.0.1。
版本號
對于版本號我們也有要求芹敌,格式為:x.y.z痊远,其中,x 用于有重大重構(gòu)時才會升級氏捞,y 用于有新的特性發(fā)布時才會升級碧聪,z 用于修改了某個 bug 后才會升級。
個人分支
個人分支下可以建目錄液茎,例如: xiaoguai/dev1, xiaoguai/dev2
常用命令
git相關(guān)配置
# 安裝完Git后第一件要做的事逞姿,設(shè)置用戶信息(global可換成local在單獨項目生效):
git config --global user.name "用戶名" # 設(shè)置用戶名
git config --global user.email "用戶郵箱" #設(shè)置郵箱
git config --global user.name # 查看用戶名是否配置成功
git config --global user.email # 查看郵箱是否配置
# 其他查看配置相關(guān)
git config --global --list # 查看全局設(shè)置相關(guān)參數(shù)列表
git config --local --list # 查看本地設(shè)置相關(guān)參數(shù)列表
git config --system --list # 查看系統(tǒng)配置參數(shù)列表
git config --list # 查看所有Git的配置(全局+本地+系統(tǒng))
git config --global color.ui true //顯示git相關(guān)顏色
從遠程倉庫克隆項目到本地
git clone git@github.com:git帳號名/倉庫名.git
將文件添加到倉庫
git add 文件名 # 將工作區(qū)的某個文件添加到暫存區(qū)
git add . # 將當(dāng)前工作區(qū)的所有文件都加入暫存區(qū)
將暫存區(qū)文件提交到本地倉庫
git commit -m "提交說明" # 將暫存區(qū)內(nèi)容提交到本地倉庫
git commit -a -m "提交說明" # 跳過緩存區(qū)操作,直接把工作區(qū)內(nèi)容提交到本地倉庫
查看倉庫當(dāng)前狀態(tài)
git status
比較文件異同
git diff # 工作區(qū)與暫存區(qū)的差異
git diff 分支名 #工作區(qū)與某分支的差異捆等,遠程分支這樣寫:remotes/origin/分支名
git diff HEAD # 工作區(qū)與HEAD指針指向的內(nèi)容差異
git diff 提交id 文件路徑 # 工作區(qū)某文件當(dāng)前版本與歷史版本的差異
git diff --stage # 工作區(qū)文件與上次提交的差異
git diff 版本TAG # 查看從某個版本后都改動內(nèi)容
git diff 分支A 分支B # 比較從分支A和分支B的差異(也支持比較兩個TAG)
git diff 分支A...分支B # 比較兩分支在分開后各自的改動
查看歷史記錄
git log # 查看所有commit記錄(SHA-A校驗和滞造,作者名稱,郵箱栋烤,提交時間谒养,提交說明)
git log -p -次數(shù) # 查看最近多少次的提交記錄
git log fileName # 查看某文件的修改記錄,找背鍋專用
代碼回滾
git reset HEAD^ # 恢復(fù)成上次提交的版本
git reset HEAD^^ # 恢復(fù)成上上次提交的版本明郭,就是多個^买窟,以此類推或用~次數(shù)
同步遠程倉庫
git push -u origin master
刪除版本庫文件
git rm 文件名
創(chuàng)建分支
git checkout -b dev
-b表示創(chuàng)建并切換分支
上面一條命令相當(dāng)于一面的二條:
git branch dev # 創(chuàng)建分支
git checkout dev # 切換分支
查看分支
git branch
合并分支
git merge dev # 用于合并指定分支到當(dāng)前分支
git merge --no-ff -m "merge with no-ff" dev
# 加上--no-ff參數(shù)就可以用普通模式合并,合并后的歷史有分支薯定,能看出來曾經(jīng)做過合并
盡量使用rebase代替merge始绍,好處主要有兩個:
1)rebase操作可以把本地未push的分叉提交歷史整理成直線;
2)rebase的目的是使得我們在查看歷史提交的變化時更容易话侄,因為分叉的提交需要三方對比亏推。
刪除分支
git branch -d dev
查看分支合并圖
git log --graph --pretty=oneline --abbrev-commit
查看遠程庫信息
git remote # -v 顯示更詳細的信息
撤消某次提交
git revert HEAD # 撤銷最近的一個提交
git revert 版本號 # 撤銷某次commit
拉取遠程分支到本地倉庫
git checkout -b 本地分支 遠程分支 # 會在本地新建分支苛败,并自動切換到該分支
git fetch origin 遠程分支:本地分支 # 會在本地新建分支,但不會自動切換径簿,還需checkout
git branch --set-upstream 本地分支 遠程分支 # 建立本地分支與遠程分支的鏈接
標(biāo)簽命令
git tag 標(biāo)簽 # 打標(biāo)簽命令罢屈,默認為HEAD
git tag # 顯示所有標(biāo)簽
git tag 標(biāo)簽 版本號 # 給某個commit版本添加標(biāo)簽
git show 標(biāo)簽 # 顯示某個標(biāo)簽的詳細信息
同步遠程倉庫更新
git fetch origin master # 從遠程獲取最新的到本地,首先從遠程的origin的master主分支下載最新的版本到origin/master分支上篇亭,然后比較本地的master分支和origin/master分支的差別缠捌,最后進行合并。
git fetch比git pull更加安全
盡量不要用命令(也看個人習(xí)慣)
1)IntelliJ IDEA下配置git
2)Sourcetree 可簡化您與 Mercurial 和 Git 存儲庫的交互译蒂,讓您集中精力編寫代碼曼月。通過 Sourcetree 簡單的 Git 圖形用戶界面查看和管理您的存儲庫。