我是如何使用 git 的?

今年我工作快十年了,其中九年都在使用 git,第一年用的是 svn。很多時候你用 git 還是 svn 不是自己決定的,而是你所在的技術團隊決定的。

這篇文章我是如何使用 git 的,沒有什麼技巧,都是個人習慣。

使用 alias

這是我的 zshrc 的 alias 配置:

alias gst='git status -sb'
alias ga='git add'
alias gc='git commit'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gl='git pull'
alias gp='git push'
alias glog="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit -- | less"

其中我最喜歡的是 gst 和 glog,效果如下:

gst

glog

如何 commit

我的 commit 粒度非常細,只要完成一個小功能就會提交。這使得代碼回滾變得非常方便,code review 也變得簡單了些。

我習慣使用 git commit . -v 來提交代碼,因爲它會打開一個編輯器讓我 review 我的改動,而且它比 git commit -m message 更能誘導我寫出更長的 commit message。

而且我用 git config --global core.editor "code --wait" 將默認編輯器設置成了 VSCode,使用起來比 vim 方便一些。不過我還是在 VSCode 裏開啓了 vim 插件。

我習慣在 commit message 裏寫中文,畢竟我的同事幾乎都是中文母語者,英文只會徒增煩惱。

如何回滾

git reset --hard xxx 可以讓代碼快速回到某個歷史提交點,但我習慣先把當前代碼 commit 一下再 reset,這樣可以防止某些改動被永久刪除。

git reflog 可以回到 reset 之前的時間點,也是經常用到的。

如何整理 commit

git commit . --amend 用來把當前代碼提交到上一次提交裏,相信很多人都用過。

git cherry-pick 則可以用來篩選 commit,我的具體做法是先新建分支 x,然後回到 master,將 master 回滾到最開始,最後從 x 分支中 cherry-pick 一些 commit 到 master 分支。

git rebase -i HEAD~3 則是對最近的三次 commit 進行合併、修改等操作,稍微有點複雜,但用過一次就會了。

不怎麼使用 GUI

我一般都是使用命令行來操作 git,因爲我能明確地看到報錯,而且能精確控制參數。GUI 實在是有些黑盒,不出錯還好,一旦出錯我就不知道怎麼解決了,所以就用得很少。

如果你喜歡 GUI,我推薦你使用 VSCode 的 git 面板或者 WebStorm 的 git 面板,都挺好用。

刪除文件

git rm --cached xxx 用於將 xxx 文件 / 目錄從 git 倉庫中刪除,但並不刪除本地文件 / 目錄,非常好用。這經常用於 xxx 雖然被寫入 .gitignore 但依然被提交了的情況。

與之相反,git add -f xxx 可以在 xxx 被 ignore 的情況下強行把 xxx 加入 git 倉庫,非常野蠻。

通靈術

有時代碼還沒提交,但需要 git pull,這個時候我推薦使用 git add . ; git stash 把當前代碼放入通靈空間,等 pull 結束後再用 git stash pop 將其召喚回來,屢試不爽。

你有什麼 git 小技巧想分享嗎?

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/S3NuW5W3x1iDDtbfHziDzQ