Git 提交竟然还能这么用?

大家好,我是鱼皮。Git 是主流的代码版本控制系统,是团队协作开发中必不可少的工具。

之前已经给大家分享过 Git / GitHub 的学习指南,感兴趣的同学可以先看视频了解:https://www.bilibili.com/video/BV1KZ4y1e7cG。

这篇文章,主要是给大家分享 Git 的核心功能 提交(Commit)的作用,帮助大家更好地利用 Git 这一工具来提高自己的开发工作效率。

什么是 Git 提交?

Git 提交是指将你的代码保存到 Git 本地存储库,就像用 Word 写长篇论文时进行保存文件一样。每次 Git 提交时都会创建一个唯一的版本,除了记录本次新增或发生修改的代码外,还可以包含提交信息,来概括自己这次提交的改动内容。

如下图,就是一次 Git 提交:

Git 提交的作用

Git 提交有很多作用,我将它分为 基础用法其他妙用

基本作用

历史记录

Git 提交最基本的作用就是维护项目的历史记录。每次提交都会记录代码库的状态,包括文件的添加、修改和删除;还包括一些提交信息,比如提交时间、描述等。这使得我们可以通过查看所有的历史提交来追溯项目的开发进度和历程,了解每个提交中都发生了什么变化。

比如查看我们编程导航文档网站项目的提交记录,能看到我是怎么一步一步构建出这个文档网站的:

开源地址:https://github.com/liyupi/code-xingqiu

在企业开发中,如果一个人写了 Bug,还死不承认,那么就可以搬出 Git 提交记录,每一行代码是谁提交的都能很快地查出来,谨防甩锅!

版本控制

另一个 Git 提交的基本作用是版本控制。每个提交都代表了代码库的一个版本,这意味着开发者可以随时切换代码版本进行开发,恢复旧版本的代码、或者撤销某次提交的代码改动。

推荐新手使用可视化工具而不是 Git 命令进行版本的切换和撤销提交,在不了解 Git 工作机制的情况下使用命令操作很容易出现问题。

如下图,在 JetBrains 系列开发工具中,右键某个提交,就可以切换版本或撤销提交了:

代码对比

你可以轻松地查看两个提交之间的所有代码更改,便于快速了解哪些部分发生了变化。这对于解决代码冲突、查找错误或审查代码非常有帮助。

在 JetBrains 系列开发工具中,只需要选中 2 个提交,然后点右键,选择 Compare Versions 就能实现代码对比了:

改动了哪些代码一目了然:

一般情况下,如果我们因为某次代码改动导致项目出现了新的 Bug。通过这种方式对比本次改动的所有代码,很快就能发现 Bug 出现的原因了。

其他妙用

除了基本作用外,Git 提交还有一些妙用~

记录信息

像上面提到的,Git 提交不仅能用于记录代码更改,我们还可以在提交信息中包含有关这次更改的重要信息。比如本次改动代码的介绍、代码更改的原因、相关的任务(需求单)或功能等。可以简单理解为给本次工作写总结和描述。

如果提交信息编写得非常清晰完善,那么项目的团队成员可以更容易地理解每个提交,甚至能做到 “提交即文档”,提高协作和项目维护效率。

正因如此,很多团队会定制自己的提交信息规范,比如之前我在鹅厂的时候,每次提交都建议带上需求单的地址,便于了解这次提交是为了完成什么需求。

这里给大家推荐一种很常用的提交信息规范 —— 约定式提交,每次提交信息都需要遵循以下的结构:

《约定式提交》文档:https://www.conventionalcommits.org/zh-hans/v1.0.0/

<类型>[可选 范围]: <描述>

[可选 正文]

[可选 脚注]

当然,这种方式有利有弊,可能有同学会觉得 “我注释都懒得写,你还让我写提交信息?” 这取决于你们项目的规模和紧急程度等因素,反正团队内部保持一致就好。

像我在用 Git 开发个人项目时,也不是每次都写很详细的提交信息的。但是带 编程导航 的同学从 0 开发项目时,每场直播写的代码都会单独作为一次提交,如下图:

是不是很清晰呢?这样做的好处是,大家想获取某场直播对应的中间代码(而不是最终的成品代码)时,只需要点击某次提交记录就可以获取到了,很方便。

如果你的提交信息写得非常标准、统一结构,那么甚至还可以用程序自动读取所有的提交信息,生成日志、或者输出提交报告。

自动化构建部署

大厂研发流程中,一般都是使用 CI / CD(持续集成和持续部署)平台,以流水线的形式自动构建部署项目的。

Git 提交可以和 CI / CD 平台进行集成,比如自动监视代码库中的提交,并在每次提交后自动触发构建和部署任务。一个典型的使用场景是,每次代码开发完成后,先提交代码到测试分支,然后 CI / CD 平台监测到本次提交,并立即在测试环境中构建和部署,而不需要人工操作,从而提交效率。

GitHub Actions 和 GitHub Webhooks 都可以实现上述功能,感兴趣的同学可以尝试下。

GitHub Actions 文档教程:https://docs.github.com/zh/actions/quickstart

检验项目真假

最后这个点就比较独特了,那就是面试官可以通过查看 Git 的提交记录来判断你的项目真假、是不是自己做的。

比如我收到一些同学的简历中,有的开源项目看起来感觉很厉害,但是点进仓库看了下提交记录,发现寥寥无几,甚至有的只有 1 次!像下图这样:

那么这个项目真的是他自己从 0 开始做的么?答案就显而易见了。

如果真的是你自己用心做的项目,提交记录绝对不止 1 次,而且面试官能够通过提交记录很清晰地了解到你的项目开发周期。

像我的 yuindex Web 终端项目一样,这才是比较真实、有说服力的:

其他人也能从你的提交记录中,感受到你对项目的用心程度。

讲到这里,是不是有些同学恍然大悟,知道为啥自己的项目明明开源了,但是没有收到面试邀请、或者被面试官觉得项目不真实了?

实践

以上就是本次分享,Git 提交的实践其实非常简单,我建议大家每次做新项目时,无论大小,都用 Git 来托管你的项目,并且每开发完一个功能或解决 Bug,都进行一次提交。等项目完成后回过头来看这些提交记录,都是自己宝贵的财富。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/150934.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

BUG:编写springboot单元测试,自动注入实体类报空指针异常

原因:修饰测试方法的Test注解导入错误 造成错误的原因是 import org.junit.Test;正确的应该是 import org.junit.jupiter.api.Test前者是Junit4,后者是Junit5 junit4的使用似乎要在测试类除了添加SpringbootTest还要添加RunWith(SpringRunner.class) 同时要注意spring-boot-s…

【Seata源码学习 】篇三 seata客户端全局事务开启、提交与回滚

1.GlobalTransactionalInterceptor 对事务方法对增强 我们已经知道 GlobalTransactionScanner 会给bean的类或方法上面标注有GlobalTransactional 注解 和 GlobalLock的 添加一个 advisor &#xff08;DefaultPointcutAdvisor ,advisor 绑定了PointCut 的 advise) 而此处的 …

工业基础类IFC—材质和纹理

在我们的 IFC技术交流群&#xff08;788206534&#xff09;里&#xff0c;经常会有人提问“如何学习 IFC文档或者其开发”的问题。对于这个问题&#xff0c;我一直没有机会做一个完整的回答&#xff0c;这次我认真回忆了自己关于IFC的学习经历&#xff0c;在此与大家分享。一是…

Wireshark 截取指定端口海量包分析

有个应用要分析一下协议&#xff0c;但是8939&#xff0c;8940传输一下子几个G的数据&#xff0c;但是要分析的端口8939实际上只有几个MB最多&#xff0c;如果用wireshark有界面的程序一截取就会卡死&#xff0c;于是使用命令行方式&#xff0c;截取指定端口的 tshark -i &quo…

Flume的安装部署及常见问题解决

1.安装地址 &#xff08;1&#xff09; Flume官网地址&#xff1a;http://flume.apache.org/ &#xff08;2&#xff09;文档查看地址&#xff1a;http://flume.apache.org/FlumeUserGuide.html &#xff08;3&#xff09;下载地址&#xff1a;http://archive.apache.org/dist…

基于Qt QList和QMap容器类示例

## QList<T> QList<T>容器是一个数组列表,特点如下: 1.大多数情况下可以用QList。像prepend()、append()和insert()这种操作,通常QList比QVector快的多。这是因为QList是基于index标签存储它的元素项在内存中(虽然内存不连续,这点与STL的list 是一样的),比…

【机器学习基础】K-Means聚类算法

&#x1f680;个人主页&#xff1a;为梦而生~ 关注我一起学习吧&#xff01; &#x1f4a1;专栏&#xff1a;机器学习 欢迎订阅&#xff01;相对完整的机器学习基础教学&#xff01; ⭐特别提醒&#xff1a;针对机器学习&#xff0c;特别开始专栏&#xff1a;机器学习python实战…

linux镜像的下载,系统下载(个人使用)

文章目录 一、系统之家二、国内镜像源三、Centos官网四、安装成功截图五、镜像类型的区别参考文档 一、系统之家 系统之家官网 二、国内镜像源 下载镜像地址&#xff1a; 1、官网地址&#xff1a;https://www.centos.org/ 2、阿里镜像站&#xff1a;https://mirrors.aliyu…

一文读懂:testcafe框架和页面元素交互

一、互动要求 使用 TestCafe 与元素进行交互操作&#xff0c;元素需满足以下条件&#xff1a;☟ 元素在 body 页面窗口或 iframe 窗口的元素内。如果某个元素在视口之外&#xff0c;则 TestCafe 通过滚动可以滚动到元素可见。 元素是可见的&#xff0c;具有以下属性&#…

实力认证|易知微上榜中国信息通信研究院数字孪生城市产业图谱!

近期&#xff0c;中国通信院就数字孪生技术在城市层面的广泛应用&#xff0c;根据数字孪生产业框架&#xff0c;结合产业发展动态和企业综合实力评估&#xff0c;选取了核心产业、关联产业和辐射产业等各领域业务代表性较强的企业&#xff08;机构&#xff09;&#xff0c;形成…

Flink(六)【DataFrame 转换算子(下)】

前言 今天学习剩下的转换算子&#xff1a;分区、分流、合流。 每天出来自学是一件孤独又充实的事情&#xff0c;希望多年以后回望自己的大学生活&#xff0c;不会因为自己的懒惰与懈怠而悔恨。 回答之所以起到了作用&#xff0c;原因是他们自己很努力。 …

FPGA系列:1、FPGA/verilog源代码保护:基于Quartus13.1平台保护verilog源码发给第三方但不泄露源码

catlog 需求具体步骤工程描述去掉相关调试文件切换顶层模块并导出相应模块为网表文件切换回原顶层模块并添加相应保护模块的qxp文件再次编译工程 参考&#xff1a; 需求 有时需要将源码交付给第三方&#xff0c;但是源码中部分模块涉及到的核心代码无法暴漏给第三方。因此&…

2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年【高处安装、维护、拆除】模拟考试题及高处安装、维护、拆除模拟考试题库&#xff0c;包含高处安装、维护、拆除模拟考试题答案和解析及高处安装、维护、拆除模拟考试题库练习。安全生产模拟考试一点通结合国家…

C语言之qsort()函数的模拟实现

C语言之qsort()函数的模拟实现 文章目录 C语言之qsort()函数的模拟实现1. 简介2. 冒泡排序3. 对冒泡排序进行改造4. 改造部分4.1 保留部分的冒泡排序4.2 比较部分4.3 交换部分 5. bubble_sort2完整代码6. 使用bubble_sort2来排序整型数组7. 使用bubble_sort2来排序结构体数组7.…

golang学习笔记——接口interfaces

文章目录 Go 语言接口例子空接口空接口的定义空接口的应用空接口作为函数的参数空接口作为map的值 类型断言接口值 类型断言例子001类型断言例子002类型断言例子003巩固练习 Go 语言接口 接口&#xff08;interface&#xff09;定义了一个对象的行为规范&#xff0c;只定义规范…

基于java web个人财务管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

stable-diffusion-webui之webui.py

主要就是webui的启动这块&#xff0c;需要初始化的地方&#xff0c;东西还是挺多的。

8年资深测试,自动化测试常见问题总结,惊险避坑...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、自动化测试简介…

2023.11.18 Hadoop之 YARN

1.简介 Apache Hadoop YARN &#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09;是一种新的 Hadoop 资源管理器&#xff0c;它是一个通用资源管理系统和调度平台&#xff0c;可为上层应用提供统一的资源管理和调度。支持多个数据处理框架&…

《轻购优品》新零售玩法:消费积分认购+众筹新玩法

《轻购优品》新零售玩法&#xff1a;消费积分认购众筹新玩法 引言&#xff1a;2023年开年已来&#xff0c;政府的工作报告提出“把恢复和扩大消费摆在优先位置”&#xff0c;并且把2023年定位为“消费提振年”&#xff0c;以“全年乐享全年盛惠”为主题多地政府共同发力&#x…