Git 2022-04-27
使用 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"
如何 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 进行合并、修改等操作,稍微有点复杂,但用过一次就会了。
删除文件
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
将其召唤回来,屡试不爽。
-------- from: 方应杭