前言:git是目前各大公司都在使用的版本控制工具。对于团队人数较多的大项目,开发效率是一个令人头痛的问题,如能充分挖掘git工具潜能,能对团队的开发效率与交付正确率有较大提升。
关键问题:在单人编码中,常规的git pull 与git push可能已经够用。但在大团队大项目的背景下,可能合作的人数超过5人,10人甚至20人时,就会不可避免的引起较多合作上带来的问题。如多人同时修改一处代码,代码版本合并,不同功能同时上线,测试环境如何控制等。这些问题轻则降低研发效率,重则可能导致代码冲突,引发线上生产问题。
解决思路:作为成熟的版本管理工具,git 有较多高阶操作供我们选择使用。与此同时,如同武林秘籍一样,越高级的武功秘法其危害性就越大,所以要更熟悉相关功能与用法才能够做到安全使用。
使用到的git 命令汇总:
git stash
git stash pop
git stash list
git reset --hard xxxxx
git reset --soft xxxx
git log
git status
git pull --rebase
git commit --amend
git branch
git checkout 分支名
git fetch
git cherry pick
情景例子:
下面由各项开发中的各项例子,连成一个项目开发流程串,进行举例讲解。
1.项目进行开发,组内共有10+工程师,基于master版本拉取5条分支,分为不同功能开发
此时,先git fetch,拉取分支更新。
再使用git checkout +分支,切换至具体开发分支
最后使用git pull ,拉取最新更新
2.每条分支上的功能点需要2-3人写作开发完成,可能会出现部分confiig文件两人共同修改的冲突。此时,同学A写完了自己的功能点a,需要上传至远程。
此时,同学A需要先使用git status,查看自己所修改的文件,是否有其他文件混入。
其次,使用git log查看提交记录,如果自己本地提交了多次commit,但其实是一次提交,可利用
git reset --soft 远程版本
恢复所有文件内容,并使用git commit在本地暂存
暂存完成后,可以使用git pull --rebase拉取远程最新更改。--rebase作用为消除拉取时可能出现的merge commit记录,并且按照时间顺序,调整同学A与其他同学的commit记录
3.同学A在分支A1开发功能a期间,需要修改分支B1的功能b中的一个小参数,但是此时代码只完成了一半。
同学A可选择git stash ,暂存所有未完成的代码。暂存完成后,可使用git stash list查看
此时,切换到功能b的分支B1,进行修改并提交。
完成后,切换回分支A1,使用git stash pop,还原回未完成的代码
4.同学A在分支A1开发功能a,代码已经完成了,并在本地提交commit,标签为 功能a,实现xxx。
但在代码评审中,被高级工程师指出了一些修改问题,进行了代码的修改。
此时同学A可以使用git commit --amend,追加这部分代码优化至上次commit,避免commit过多导致代码分布混乱的问题
5.项目开发进行了一个月,此时,因为某些重大原因,部分功能需要马上提前上线,且这些功能分布在分支A1,B1,C1,D1,E1中。但根据一线开发工程师反馈,这些分支上还有不支持上线的功能,且代码都混在一起,人工复制粘贴的耗时很大,后续测试上线时间也非常紧张,询问高级工程师如何解决?
高级工程师眉头一皱,在电脑屏幕前不断搜索着什么。10分钟,20分钟过去了
突然间高工神色缓和了很多,在键盘上打出 cherry pick两个关键词,给下面的一线工程师淡淡的说,你们试试这个吧。
总结:
作为团队架构师,需要关注项目全流程的实现与方向把控。git作为成熟的版本管理工具,还有很多神奇的命令,这里不进行一一讲述,但对于经典的问题解决所用到的命令,需要掌握其用法及可能带来的问题,如git 记录被抹除,代码丢失等。对于团队内初级工程师来说,git操作不敢,不会,需要着重培训提升。