【效率开发】先备份 再拉取:gpull

426 阅读1分钟

一、背景

多人开发,免不了要在提交之前先 git pull --rebase 一下,修完冲突再提交;

就是这么一个简简单单的命令,却时常让我胆战心惊 —— 一不小心就会在 pull 的时候把辛辛苦苦写的代码给搞丢了!

所以,痛定思痛,决定优化这个操作!

二、设计

思路

其实,为了避免代码丢失,在重要操作之前,我都会通过「检出分支」的方式备份当前代码,所以可以把 pull 操作扩展为如下操作:

  1. 查看当前分支名称,并检出备份
  2. 执行 git pull --rebase

实现方式

参考 gpush 的实现:

alias gpush='git push origin HEAD:refs/for/master'

注:顺便优化一下它的实现,使得可以push到当前分支的远程分支:

alias gpush='git push origin `git symbolic-ref --short HEAD`:refs/for/`git symbolic-ref --short HEAD`'

三、实现

新加别名

废话不多说,直接上代码:

# git pull --rebase 的同时检出一份以备份,避免本地代码被覆盖、丢失
alias gpull='cb=`git symbolic-ref --short HEAD` && dt=`date "+%Y%m%d%H%M%S"` && bb="${cb}_${dt}" && git branch backup/$bb && git pull --rebase'

让别名生效

最后参考如下方法 或 这篇文章 完成该别名的加载,这样就算完事儿了~

1. 临时生效

在终端执行该代码

2. 永久生效

a. 把上述代码粘贴到 ~/.bashrc 文件(没有就自己创建一个吧)的最后,然后执行 source ~/.bashrc

b. 新建或打开 ~/.bash_profile 文件,在新的一行写入 source ~/.bashrc

执行效果

执行效果如下:

Andys-MacBook-Pro-2018:WKStudent mengxinxin$ git branch
* dev1.1.0
  master
Andys-MacBook-Pro-2018:WKStudent mengxinxin$ gpull
   ^ ^      |           Hi, mengxinxin            |
|    o    .:[I]:_       Welcome to iCode        ,:[I]:.
|       .: :[C]: :-.     _= ET@baidu =_      ,-: :[C]: :.
|     .: : :[O]: : :`._                   ,.': : :[O]: : :.
| _..: : : :[D]: : : : : :-._________.-: : : : : :[D]: : : :-._
| ^^^^^^^^^^[E]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^[E]^^^^^^^^^^
|           [|]                                   [|]
|  ~~^-_~^~|||~^-~^~_~^-~_^~-^~_^~~-^~_~^~-^~_^|||~^-~_~^--
|
|Please wait a moment...
|Already up to date.
Current branch dev1.1.0 is up to date.
Andys-MacBook-Pro-2018:WKStudent mengxinxin$ git branch
  backup/dev1.1.0_20200816175915
* dev1.1.0
  master
Andys-MacBook-Pro-2018:WKStudent mengxinxin$