git使用经验

381 阅读4分钟

从工作到现在都一直使用git作为代码管理工具,总结一下工作中常用的场景和它们相关的命令,还有自己的一些见解!

一、相关平台

以下平台都是使用git作为代码管理工具的,并且各有自己特色,我4种都有使用,都算稳定可靠!

  • gitlab

通常自建代码托管,都首选gitlab,搭建公司自己的代码管理平台,能保证数据安全性,稳定性嘛就看公司人咋样了

  • 码云

码云是开源中国 Git 代码托管平台,也支持svn,带宽都高,非常放心托管

  • coding

coding以前只提供给个人5个免费仓库,被腾讯收购以后也解决了这一痛点

  • github

全球最大的开源项目平台,想保存私有仓库是需要收费的,而且还是美元,大家一般就在上面发布开源代码,由于服务器在国外,速度不行

二、一次迭代开发

假设现在需求评审完毕,已经分配了下来需求开发,并且将需求分配到了每个人的手中,然后准备开发,怎么操作git仓库呢?

  • 1、拉出迭代分支(基于master)

一般公司有自己的平台的话,通过平台创建迭代就能创建origin的迭代分支了

  • 2、拉出自己的开发分支(myDev)
git checkout -b myDev
  • 3、在myDev分支上开发,并各种commit
git add .
git commit -m '更新内容'
  • 4、push自己分支到origin/myDev
git push origin myDev
  • 5、向迭代分支发起pull request请求,请求合并到迭代分支上(经同事code review)

发送一个合并请求,经review后,可合并到迭代分支

  • 6、迭代分支上验证功能点,不断完善

测试完功能点,全部通过后推上预发环境,数据量的变化会影响一些功能,然后做出相应的调整。在预发调整完,验证完毕后,就会开始走发布流程,先是灰度(让一部分用户体验,相当于体验服),然后没有问题,在全量发布。

  • 7、全量发布

全量发布时,以master分支merge迭代分支,然后以master分支来全量发布

git merge '分支名'
  • 8、(可选)回滚

如果这次迭代出现不可预期的问题,并且并非短时间可以解决的问题,那么就只能选择回滚,对于代码上将,就是把这次迭代的

git revert <commit_id>

二、从线上master拉自己的开发分支

我们开发不能本地随便找个分支就开发吧,有的冗余代码在某个分支,上次迭代就没提上去,这次直接以这个分支开发,然后不就提上去了吗?所以直接以master分支为基线创建我们的开发分支为稳当。

  • 1、创建我们的开发分支
git checkout -b myDev origin/master
  • 2、push到线上
git push origin myDev
  • 3、与线上关联
git branch --set-upstream-to=origin/myDev

三、依赖同事某次的提交

我们还不想合并代码,但是我们却依赖同事的某次commit,或者两三次,可以考虑使用 cherry-pick

# 只将感兴趣的 commit 加入当前代码
git cherry-pick commit1
git cherry-pick commit2

四、处理代码冲突的原则

git当同时更改了一份文件时,提交就会发生冲突,需要一个人合并之后二次提交才行。

有时候同事把你的代码干掉了,你真的想打人啊,我想说的是,一起开发项目时,冲突在所难免,但是处理冲突的选择能决定最终的结果。

  • 1、能both

肯定全部保留,这样皆大欢喜,看到变更的和自己无关,那样可以保留双方的。

  • 2、只能保留一方的

如果只能保留一方,优先保存别人的,自己的再新增一部分都行,把别人的干掉我只能送一句话(不怕神一样的对手)

  • 3、双方都需要修改的

基本不存在哈,无非是需要同事一起确定下功能逻辑

五、多功能点且独立的点开发时

我强烈建议每个功能点都拉一个本地分支,然后在需要合并代码时再拉一个分支来整合自己的每个功能点,然后以这个集中的分支来向迭代分支合并代码。这样的好处就是:

  • 1、假如开发不完全部的功能点,能发布一部分
  • 2、比如需要下掉某些点,你可以在集合的分支上剔除那个功能就行了

总之,掌握分支操作很重要,能将事情很简单的解决

六、主分支迭代之后同步到开发分支

使用git rebase master合并主分支,rebase就是调整基线,以现在分支结果为基线

git rebase master

其他

  • github作为最大的开源项目发源地将master主分支换成了main

由于master存在种族歧视之类的,GitHub被迫将master更名为main,以后大家主分支就叫main了