暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

优雅的源代码管理(三):本地优雅的使用 Git Rebase 变基

任霏博客 2023-04-04
170

本文为日常工作使用,仅做简单的解析,不做深入探究。

温馨提示

如果你不熟悉命令行,推荐使用可视化界面操作,git 的可视化软件有很多,例如:fork、sourcetree等等。

本文是针对个人本地单机上的Git操作,不是 GitFlow 管理流程,注意区分。

Git Merge 和 Rebase

其实我要吐槽的一个点就是我在项目中看到大量的 Merge 记录,但其实 Merge 并不是这样使用的,大多数情况应当使用 Rebase 变基。

首先,为了方便演示,我们先设定两个分支,master 分支和 renfei 分支,其中 master 分支就是我们的基线分支,所以任何冲突和修改都以 master 分支为主,renfei 分支为我自己个人的开发分支,我在这个分支下工作。

如果,master 分支上有人提交了新的功能,我需要依赖或者避免后续冲突,我希望把 master 分支的内容拉取到我自己的 renfei 分支,这个时候应该用 git rebase 操作,将我自己的 renfei 分支进行变基变到当前 master 的节点上。

如果,我的功能开发完了,需要贡献给 master 分支,这个时候应该用 git merge 操作,将我个人的 renfei 分支融合到 master 分支,并且产生一个 merge commit 提交。

Git Rebase 的理解

我用大白话和图来讲一下,可能不严谨,我只表示一下意思。

在 git 中每个提交都是一个节点,组成的链条,就像链表一样,我们只需要修改一下链表的指针,就可以快速的编辑这个链条,所以变基操作我理解的是下面这个图:

由于 master 分支继续提交,原本的链表落后了,我们只需要修改链表的指针,指向最新的节点即可把 master 分支的变化拉取进自己的分支。

Git Merge 的理解

我用大白话和图来讲一下,可能不严谨,我只表示一下意思。

我的理解,merge 就是把一个分支的所有修改打包成一个 commit 提交,作为新的提交连接到目标分支,如下图:

有同学可能会问,为什么不用变基那样改指针?我是这样理解的,master 分支作为基线分支,上面的代码是可信的、安全的、权威的,而自己的开发分支是不可信的、不安全的,所以需要把你的任何修改都作为一个 commit 提交,如果一旦有问题,可以快速回滚这个提交,从而把有问题的代码恢复回去。

什么时候使用 Git Merge/Rebase

我做个总结,如果你是把权威分支的代码拉取到自己的分支或者不信任的分支中,那就使用 Git Rebase 变基;如果你要往权威分支中贡献代码,那你应该使用 Git Merge。

关于 MR(Merge Requests)

有些团队会要求往权威分支合并时提交 MR(Merge Requests)合并请求,而不是自己 Merge 以后 push,保护分支禁止 push。

有些团队则没有这类规定,如果团队较小、大家合作默契,可以不使用 MR,虽然不符合规定,但往往大家都很忙没有时间跟你 review 代码。

不过,我认为 MR 有个好功能,那就是甩锅功能,如果你代码变动巨大,你有点慌,你可以打开一个 MR,然后喊上团队的小伙伴或领导来 review 你的 MR 请求,让他们来点 Merge 按钮,嗯~~出了问题大家一起被锅啊。

总结

我总结一下我的习惯,从来没出事儿:

commit 你可以随便 commit,但是,当你想 push 前,你应该先 pull 并且使用 rebase 变基,然后再 push。

commit 的规范

此规范推荐执行,但不强制。

一个 Commit Message 主要由 Header + Body + Footer 组成,最主要的是 Header,另外两个可选。

Header 又由 type、scope、subject 构成,其中 scope 是可选,意思是 commit 受影响的范围,type 主要有以下选项:

  • feat: 新增功能

  • fix: 修复错误

  • docs: 仅更改文档

  • style: 不影响代码含义的更改(空格、格式、缺少分号等)

  • refactor: 既不修复bug也不添加功能的代码更改

  • perf: 提高性能的代码更改

  • test: 添加缺失测试或更正现有测试

  • build: 影响构建系统或外部依赖关系的更改(示例范围:gulp, broccoli, npm)

  • ci: 更改ci配置文件和脚本(示例范围:Travis、Circle、BrowserStack、SauceLabs)

  • chore: 不修改sre或测试文件的其他更改

  • revert: 还原以前的提交

  • subject 就是最主要的,对你本次提交进行简短的描述,不要超过50个字、结尾不加句号

举个标准的例子:build(deps): update xxx maven version 这个 Header 的含义就是这个提交将影响构建功能中的依赖,升级了 xxx 的 maven 版本。





开发者交流群


长按关注
任霏博客微信
给你第一手的IT开发者资讯
24小时留言互动


git master git提交代码 merge
文章转载自 任霏博客,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

深圳SEO优化公司徐州至尊标王报价台州至尊标王多少钱石岩网络广告推广推荐鹤壁网站搜索优化哪家好邯郸企业网站制作哪家好莱芜SEO按天收费多少钱铜川优化公司迪庆网站建设设计哪家好石岩网站优化价格坪山企业网站改版多少钱河源网页设计推荐贵阳百搜标王哪家好长沙阿里店铺托管报价武威网站开发公司鹤岗网站优化按天计费多少钱周口网络推广多少钱鄂州网站排名优化公司海口如何制作网站坪山网站排名优化推荐宿州百度网站优化多少钱揭阳网站搭建公司钦州英文网站建设哪家好大芬seo排名价格云浮模板制作公司郑州seo推荐迪庆模板网站建设报价雅安关键词按天扣费多少钱通化外贸网站制作常德百搜标王荆门阿里店铺托管公司歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化