团队从svn迁移至git已经一个月有余了,但是不幸的是,团队在使用git的过程中,步调并不统一,大家对git的理解多有偏差,造成上线代码的过程中,我的代码悲催地被别人删除掉了。导致线上报404错误。
过程是这样的:我开完了一A功能,测试ok合到主干上,这个时候J哥也完成了功能B的开发,准备上线。他的操作是这样的,他先pull主干上的代码至本地分支,然后准备commit自己本地的更新,在push的时候发现发了一些代码,也就是我开发的代码,这个时候他又用了错误的工具SourceTree,这个工具提醒他可以discard代码,结果悲催的事情发生了,J哥在不确定是谁的代码情况下,残忍地discard我的代码...
为了找清楚这件事情的起因,我们发了有两个多小时的时间,原因是找到了,但是这个时候J哥生病住院了,似乎是命中注定有此一劫...
此事引起的蝴蝶效应导致leader第二天早上召集大家开了一个会,还原了事情的发生的过程,但最终的焦点却停留在rebase这个梦魇上。事实的根源却在于没有一套正确的代码提交与修改流程。会上我提出一个建议,让大家用统一的开发工具pycharm,最好都统一用mac电脑(目前开发有用windows、ubuntu、mac)。开发环境的不统一,开发工具有人用pycharm,有人用IDEA,有人用aptana,有人用sublime, 也有人用vim,目测还没有人用emacs, 开发工具也不统一,不同的系统下,各种配置也略有不同,有点百花齐放,眼花缭乱的感觉。
在开发流程中,我自己总结了一套流程。
- 每当要开发一个新功能,就从本地master拉取一个分支
git checkout master #切换到master分支
git pull #保证当前master分支是最新的
git checkout -b my_code master #从master开出一个自己的分支my_code - 功能开发完测试ok,这个时候需要把代码合进主干
git checkout master #先切换到master分支
git pull #保证当前master分支是最新的,因为在你开发的这段时间,可能有其它人也提交了代码
git checkout my_code #再切换到自己的开发分支
git merge --no-ff master #合并master分支,因为master分支是线上的代码,理论上讲肯定不会有问题,若有冲突,也是在my_code分支解决,不会污染其它分支。 - 用master分支合并my_code分支
git checkout master
git merge --no-ff my_code
git push
基本原则是,新功能,多拉分支,先用自己的分支合主干分支,这样即使有冲突也可能在自己的分支解决,然后再用主干分支合自己的分支,这样就不会有问题了,重要原则:保证本地的master分支是最新的,每次合并前都要先pull一下。
用好git,码好代码!