前言
之前寫過一篇文章,對git的語法有了詳細的說明,有興趣的可以看看Git的使用規(guī)范。經(jīng)過這些年的摸爬滾打,總結(jié)了一些經(jīng)驗,讓我們一起優(yōu)雅的使用Git吧?。?!
工具篇
如果你快速上手,有圖形化界面的,下面兩個軟件都不錯
但是,無論你是新手還是老手,對于git操作,我還是強烈推薦終端命令行(Mac下推薦Iterm2+Oh My Zsh的組合)。
這時候應該有很多人就要開始質(zhì)疑了,有便捷的軟件不用干嗎還要去命令行,我是傻么,再說git命令我又記不住 etc...
為什么會質(zhì)疑呢?無非還是你不熟么,不知道git到底為何物,恐懼…git常用的命令也就10來個,等過了磨合期后你會愛上它的。
個人有幾點推薦理由:
- 清晰的知道每一步都做了什么,心里有數(shù)。不會因為點了軟件某個不清晰的按鈕,導致自己代碼找不到了;
- 規(guī)范自己使用git的規(guī)范,特別是commit提交的內(nèi)容和描述;
- 更加深入的理解git,有多少人知道
git reflog,這個命令在代碼找不到的情況下能救命; - 裝X必備,每次提交的時候刷刷敲鍵盤的感覺,誰用誰知道;
效率篇
既然推薦命令行提交代碼,每次都要輸入那么長的命令,如何體現(xiàn)自己的效(BI)率(GE)。可以考慮別名和命令記憶功能。
別名
對于一些常用的操作,完全可以設置一些更短更好用的別名,方便我們使用。個人使用的別名如下,供大家參考:
# vim .gitconfig
[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
zsh-autosuggestions
命令自動提示插件,這個是個很有意思也很高效的插件。能記錄平時你輸入過的命令,下次再輸入的時候,它會提前提示你,方便懶人。
github: https://github.com/zsh-users/zsh-autosuggestions
規(guī)范篇
對于git的提交規(guī)范,建議使用Angular的commit規(guī)范,詳見Git的使用規(guī)范。要使用此套規(guī)范建議安裝git cz插件。
git cz
github:https://github.com/commitizen/cz-cli
npm install -g commitizen
commitizen init cz-conventional-changelog --save-dev --save-exact
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

conventional-changelog
當你需要從git提交記錄生成更改日志,conventional-changelog插件能滿足你的需求(配合git cz使用)
github:https://github.com/conventional-changelog/conventional-changelog
$ npm install -g conventional-changelog-cli
$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -s
如果您是第一次使用此工具并希望生成以前的所有更改日志,則可以執(zhí)行此操作:
# 只會輸入固定幾個類型的,如Feature、Fix
conventional-changelog -p angular -i CHANGELOG.md -s -r 0
# 輸入所有的類型的
conventional-changelog -p jscs -i CHANGELOG.md -s -r 0
這將覆蓋任何先前的更改日志。
可以使用CLI列出所有可用的命令行參數(shù): conventional-changelog --help.
git flow

分支說明
| 名稱 | 說明 | 命名規(guī)范 | 命名示例 | 合并目標 | 合并操作 |
|---|---|---|---|---|---|
| master | 線上穩(wěn)定代碼 | master | master | -- | -- |
| release | 待發(fā)布分支,下個版本需上線的版本,給QA提測 | release | release | master | merge request |
| feature | 功能分支,一個版本對應一個feature分支 | feature/xxx | xxx = [ 版本號 | 功能名 ] 例如[feature/9.2.0 | feature/house ],但不要是自己的名字[ feature/pp ] | release | merge request |
| dev | 開發(fā)分支,每個人都應該有自己獨立的開發(fā)分支 | dev/xxx | xxx = [ 功能名 | 版本號 | JIRA ] + 唯一標識 | feature/xxx、release | merge request |
| hotfix | 緊急修復分支 | hotfix/xxx | xxx = [ 功能名 | JIRA ] | master | merge request |
注意:
1、提交代碼前需合并目標分支,沖突在自己本地分支中解決?。?!(推薦使用rebase進行分支合并)
2、執(zhí)行Merge Request之后,原始分支應該在遠端刪除!?。?/strong>
gitflow插件
$ brew install git-flow
如果對gitflow整個流程十分熟悉的時候,不太推薦此插件,個人不是很習慣。
git flow
init Initialize a new git repo with support for the branching model.
feature Manage your feature branches.
release Manage your release branches.
hotfix Manage your hotfix branches.
support Manage your support branches.
version Shows version information.