前言
個(gè)人使用git也快4年的時(shí)間了,從開(kāi)始的pull&push分不清捆交,到慢慢的注重使用規(guī)范淑翼,使用效率,再到在團(tuán)隊(duì)協(xié)作規(guī)范品追,個(gè)人總結(jié)了一套自己的想法玄括,不一定都對(duì),希望給大家一些參考肉瓦。
初始git
git從一出來(lái)就伴隨著和svn的比較差異惠豺,個(gè)人覺(jué)得他們最大的差異是以下幾點(diǎn):
- git有各自的本地倉(cāng)庫(kù)银还,svn只有一個(gè)中央倉(cāng)庫(kù)
- git具有強(qiáng)大的分支管理风宁,這點(diǎn)是svn無(wú)法媲美的
- git的每次commit保存的是文件之間的diff洁墙,svn則是全量保存
git常用的命令
git的命令實(shí)在是太多了,有很多可能我們永遠(yuǎn)都用不上戒财,作為一個(gè)工具热监,我們應(yīng)該將其基本命令做到熟練使用就可以啦。
下面列出我常用的一些命令:
- pull
- push
- add
- commit
- status
- fetch
- branch
- checkout
- diff
- log
- merge
- rebase
如果小伙伴還不知道上述命令的具體的含義饮寞,得去好好補(bǔ)補(bǔ)課啦孝扛!
更多詳細(xì)的git說(shuō)明,請(qǐng)點(diǎn)擊查看
git客戶端
進(jìn)行g(shù)it操作可以使用命令行終端幽崩,或者使用客戶端(如SourceTree)苦始。個(gè)人建議絕大部分操作都在命令行終端進(jìn)行,如pull慌申、push陌选、commit、checkout等操作蹄溉,少部分操作在客戶端進(jìn)行咨油,如查看每次提交的diff或者整體分支線。
在命令行操作git柒爵,你會(huì)更好的把握每次操作都做了些什么役电。為了更高(zhuang)效(bi)的操作git,有個(gè)小訣竅是你必須掌握的:alias(設(shè)置別名)棉胀。
下面是我常用的alias配置:
- ci = commit
- st = status
- co = checkout
- br = branch
- ss = status --short
- df = diff
- dc = diff --cached
- lo = log --oneline
- lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit
最后lg
這個(gè)最屌了法瑟,我也是從別處學(xué)過(guò)來(lái),具體啥效果唁奢,大家試試就知道了
alias的配置沒(méi)有最佳的霎挟,配置符合自己習(xí)慣的即可
更多alias配置可參考
git基礎(chǔ)就一筆帶過(guò)了,更多的細(xì)節(jié)網(wǎng)絡(luò)上有許多的相關(guān)文章驮瞧,相信大家都能找到自己想要的氓扛!
git分支使用規(guī)范
下面要說(shuō)的是自己在團(tuán)隊(duì)內(nèi)推行的一套多人協(xié)作的git分支使用規(guī)范,這也是大部分團(tuán)隊(duì)在用的一套分支規(guī)范论笔。
上述圖采郎,相信大部分人都見(jiàn)過(guò),但不一定理解了狂魔,我就根據(jù)自己的使用總結(jié)如下:
- 一個(gè)穩(wěn)定master分支
- 一個(gè)待發(fā)布的develop分支
- 若干個(gè)正在開(kāi)發(fā)的feature分支
- 分支合并前先rebase待合并的分支
- 分支合并使用merge —no—ff蒜埋,生成合并記錄
- 可以使用gitlab的pull request進(jìn)行合并前的code review
- 如遇到線上有一般的bug,可在develop上切換出hotFix分支進(jìn)行bug修復(fù)最楷,完成后合并到develop上整份,等下次版本一起發(fā)布
- 如遇到線上有十分嚴(yán)重bug待错,應(yīng)在master上切換出hotFix分支進(jìn)行bug修復(fù),并驗(yàn)證好了后隨即合并到master上準(zhǔn)備發(fā)布
- 版本發(fā)布后可以按需切換出版本分支(release-v1.0)或者使用tag進(jìn)行代替
commit規(guī)范
上述兩幅圖烈评,都是我不同時(shí)期的commit記錄火俄,相信大部分人都會(huì)覺(jué)得右圖中的commit要好些吧!
哈哈哈讲冠,下面開(kāi)始提問(wèn)環(huán)節(jié)
什么樣子的commit才算好的呢瓜客?
- 保證commit盡量只做一件事
- 書(shū)寫(xiě)commit message言簡(jiǎn)意賅
- 規(guī)范commit message格式
為什么要規(guī)范commit message?
- 加快Code Review 的過(guò)程
- 可以快速生成release note
- 讓其他的程序猿找歷史問(wèn)題的時(shí)候想跪謝
- 幫助提高項(xiàng)目的整體質(zhì)量
那如何規(guī)范commit message呢竿开?
這個(gè)問(wèn)題問(wèn)的好啊谱仪,我們要規(guī)范commit,首先是不是應(yīng)該要全面剖析commit呢否彩!
commit全面剖析
提交信息包括三個(gè)部分:Header疯攒,Body 和 Footer。
<Header>
<Body>
<Footer>
其中列荔,Header 是必需的敬尺,Body 和 Footer 可以省略。
Header
格式:<type>: <subject>
type:用于說(shuō)明 commit 的類(lèi)別肌毅,如:feat筷转、fix等
subject:本次commit的簡(jiǎn)短描述,以及物動(dòng)詞開(kāi)始悬而,15個(gè)字內(nèi)
Body
Body 是對(duì)本次 commit 的詳細(xì)描述呜舒,可以分成多行。
注意:應(yīng)該說(shuō)明代碼變動(dòng)的動(dòng)機(jī)笨奠,以及與以前行為的對(duì)比袭蝗。
無(wú)重大變更,一般不寫(xiě)般婆。
Footer
Footer 一般只用于以下幾種情況
- 關(guān)聯(lián) Issue(Issue #1, #2, #3)
- 關(guān)閉 Issue(Close #1, #2, #3)
可用github關(guān)閉issue到腥,或者與自己的任務(wù)相關(guān)聯(lián)
說(shuō)了這么多,我也知道了要規(guī)范commit message蔚袍,但是難道我們每次commit的時(shí)候都手動(dòng)輸入乡范,達(dá)到上述右圖中的效果么?
很明顯不是啦啤咽,這樣子做根本就體現(xiàn)不出我們是程序猿的懶晋辆。
下面到了推出解決方案的時(shí)候了
git cz插件
根據(jù)github上相關(guān)提示進(jìn)行安裝
git cz插件
插件安裝完成之后,輸入git cz
能出現(xiàn)以下效果就說(shuō)明你裝成功了
都是些簡(jiǎn)單的英文宇整,大家都看的懂瓶佳,我就header中type進(jìn)行簡(jiǎn)單說(shuō)明:
- feat:完成一些功能
- fix:修復(fù)一些問(wèn)題
- docs:一些文檔修改
- style:樣式修改
- refactor:一些無(wú)關(guān)功能性的修改,例如重命名
- perf:一些優(yōu)化重構(gòu)
- test:測(cè)試相關(guān)提交
- chore:引入一些第三方庫(kù)等
總結(jié)
本文將個(gè)人的git使用經(jīng)驗(yàn)進(jìn)行了初步總結(jié)鳞青,對(duì)你而言有好有壞霸饲,如其中有部分能幫組你为朋,就十分高興了!
后記
此篇博客算是我再次踏上書(shū)寫(xiě)博客之路的第一篇厚脉,期望自己能堅(jiān)持下去习寸,達(dá)到每月能有2-3篇博客的產(chǎn)出。
本人有4年以上的移動(dòng)端開(kāi)發(fā)經(jīng)驗(yàn)器仗,目前主要做Android端的開(kāi)發(fā)融涣,總覺(jué)得該沉淀沉淀啦,總結(jié)積累的開(kāi)發(fā)經(jīng)驗(yàn)精钮。
文中所說(shuō)不一定完全對(duì),歡迎大家拍磚剃斧,我一定虛心接受轨香,互相討論!