我是如何使用 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