Git系列:git commit 被忽视的高级用法


在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~
  • 专栏导航
    • Python面试合集系列:Python面试题合集,剑指大厂
    • GO基础学习笔记系列:记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列:详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列:总结好用的命令,高效开发
    • 算法与数据结构系列:总结数据结构和算法,不同类型针对性训练,提升编程思维

非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

💖The Start💖点点关注,收藏不迷路💖

📒文章目录

    • 引言
    • 一、编写有意义的 commit 消息
      • 实例
    • 二、交互式暂存
      • 使用方法
    • 三、原子提交
      • 实践技巧
    • 四、高级合并策略
      • 常用策略
      • 高级技巧
    • 五、保持历史清晰
    • 结语


在这里插入图片描述

引言

在软件开发中,Git 已成为版本控制的行业标准。它不仅帮助我们追踪代码的变更,还促进了团队协作。然而,Git 的强大之处在于细节,尤其是 git commit 命令的巧妙使用。本文将深入探讨 Git commit 的高级使用技巧,旨在为中高级开发者提供更深入的理解和实践指导。

Git commit 是记录代码变更的基石。一个良好的提交习惯可以极大提高代码的可维护性和团队协作的效率。本文将从 commit 消息的编写、交互式暂存、原子提交以及高级合并策略等方面展开讨论。

以下是一些常见的 git commit 参数及其讲解:

  • -m: 这个参数后面跟着的是要提交的更改的描述信息。如果你在提交时没有使用 -m 参数,Git 会打开一个文本编辑器让你输入提交信息。

  • -a: 这个参数告诉 Git 自动地将已经跟踪的文件的更改(即那些 Git 已经知道关于它们的信息的文件)添加到提交中,这样你就不需要显式地使用 git add 命令了。

  • --amend: 这个参数允许你修改最近一次的提交。这通常用于当你想要修改提交信息,或者当你想要将未暂存的更改添加到最近的提交中。

  • --no-verify: 跳过 pre-commit 和 commit-msg 钩子脚本的执行。

  • --signoff: 在提交信息中添加一个签名。

  • -u <key-id>: 使用 GPG 密钥签名提交。

  • --gpg-sign: 使用 GPG 密钥签名提交。

  • -C <commit>--reuse-message: 重用一个已有的提交信息。

  • -c <commit>--reedit-message: 重用一个已有的提交信息,但是编辑它。

  • -i <commit>--interactive: 交互式地选择要合并到提交中的更改。

  • -F <file>: 从指定的文件中读取提交信息。

  • --allow-empty: 允许提交一个空的提交。

  • -e--edit: 允许你编辑提交信息,即使使用了 -m 参数。

  • --no-edit: 使用默认信息而不进入编辑器。

  • -v--verbose: 显示更详细的信息,比如哪些文件被更改了。

  • -q--quiet: 减少输出信息。

  • --date <date>: 提交的作者日期。

  • --tz <timezone>: 时区。

  • --author <author>: 提交的作者信息。

  • --fixup: 产生一个“fixup”提交,通常用于后续的 squash 合并。

  • --squash: 产生一个“squash”提交,通常用于后续的 squash 合并。

  • --reset-author: 重置提交的作者为命令执行者。

这些参数可以帮助你更灵活地使用 git commit 命令,以适应不同的提交需求。

一、编写有意义的 commit 消息

commit 消息是沟通变更意图的关键。一个清晰的 commit 消息可以让团队成员快速理解你的工作。根据约定,commit 消息通常分为三部分:

  1. 标题:简短描述变更,通常不超过50个字符。
  2. 主体:详细解释变更的原因和影响,如果必要,可以分成多行。
  3. 断行:标题和主体之间应有一个空行。

实例

fix(pencil): stop graphite breaking when too much pressure applied

Increase the pressure resistance of the graphite core inside bluepencils. This
prevents the core from breaking apart due to downforce applied by the user.
Closes #48.

二、交互式暂存

Git 提供了 git add -igit add --interactive 命令,允许开发者交互式地选择哪些更改进入暂存区。这对于大型更改非常有帮助,可以逐步提交,避免一次性提交过多更改。

使用方法

  1. 运行 git add -i
  2. 选择 staged 查看已暂存的更改。
  3. 选择 unstaged 查看未暂存的更改。
  4. 对更改进行暂存(add)、取消暂存(reset)或查看差异(diff)。

三、原子提交

原子提交是指将逻辑上相关的更改作为一个整体提交,以保证代码库的一致性。这有助于避免部分提交带来的问题。

实践技巧

  • 使用 git rebase -i 进行交互式变基,合并多个提交为一个。
  • 避免在 feature 分支上进行大量提交,而是定期 rebase 并 squash。

四、高级合并策略

Git 提供了多种合并策略,以适应不同的工作流程。

常用策略

  • Fast-forward:当两个分支的提交历史线性时,Git 会自动执行快进合并。
  • Three-way merge:当存在分支分叉时,Git 会执行三方合并,创建一个新的合并提交。

高级技巧

  • 使用 git merge --no-ff 强制创建一个新的合并提交,即使分支是线性的。
  • 使用 git merge --squash 将所有更改合并为一个单一的提交。

五、保持历史清晰

一个清晰的历史记录对于代码的可维护性至关重要。以下是一些保持历史清晰的技巧:

  1. 重写历史:使用 git rebase -i 重写不必要的提交或合并历史。
  2. 避免无意义的提交:合并无关紧要的更改,避免提交大量空格或格式更改。
  3. 使用分支:为每个功能或修复使用单独的分支,然后合并到主分支。

结语

Git commit 是软件开发中不可或缺的一部分。通过掌握高级提交技巧,开发者可以更高效地管理代码变更,提高团队协作的效率。记住,良好的提交习惯不仅有助于当前的项目,还能为未来的维护工作打下坚实的基础。


本文旨在为中高级开发者提供 Git commit 的深入理解和实践指导。希望读者能够从中获得启发,并将这些技巧应用到实际工作中,以提升代码质量和团队协作的效率。如果你有任何问题或想要进一步讨论,欢迎在评论区留下你的想法。


❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏、分享下吧,非常感谢!👍 👍 👍

🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

增量同步笔记

2.2.2.增量同步 全量同步需要先做RDB&#xff0c;然后将RDB文件通过网络传输个slave&#xff0c;成本太高了。因此除了第一次做全量同步&#xff0c;其它大多数时候slave与master都是做增量同步。 什么是增量同步&#xff1f;就是只更新slave与master存在差异的部分数据。如图…

电脑文件x3daudio1 7.dll怎么修复?快速修复x3daudio1 7.dll的方法

你试过电脑文件x3daudio1 7.dll丢失么&#xff1f;如果你有遇到这种情况&#xff0c;那么可能你的某些程序就会启动不了&#xff0c;毕竟这个文件是用来处理音频功能的&#xff0c;那么我们要怎么去修复&#xff1f;下面我们一起来详细的了解电脑文件x3daudio1 7.dll这个文件吧…

(三)小程序样式和组件

视频链接&#xff1a;尚硅谷2024最新版微信小程序 文章目录 小程序的样式和组件介绍样式-尺寸单位 rpx样式-全局样式和局部样式组件-组件案例演示组件案例-轮播图区域绘制组件案例-轮播图图片添加组件案例-绘制公司信息区域组件案例-商品导航区域组件案例-跳转到商品列表组件案…

【DPU系列之】如何通过带外口登录到DPU上的ARM服务器?(Bluefield2举例)

文章目录 1. 背景说明2. 详细操作步骤2.1 目标拓扑结构2.2 连接DPU带外口网线&#xff0c;并获取IP地址2.3 ssh登录到DPU 3. 进一步看看系统的一些信息3.1 CPU信息&#xff1a;8核A723.2 内存信息 16GB3.3 查看ibdev设备 3.4 使用小工具pcie2netdev查看信息3.5 查看PCIe设备信息…

Vue-路由介绍

目录 一、思考引入 二、路由介绍 一、思考引入 单页面应用程序&#xff0c;之所以开发效率高&#xff0c;性能高&#xff0c;用户体验好&#xff0c;是因为页面按需更新。 而如果要按需更新&#xff0c;首先需要明确&#xff1a;访问路径和组件的对应关系。该关系通过路由来…

Python爬虫获取豆瓣电影Top100

大家好&#xff0c;我是秋意零。 今天分析一篇&#xff0c;Python爬虫获取豆瓣电影Top100。 在此之前&#xff0c;我没有学习过爬虫&#xff0c;只有一丢丢的Python基础。下面效果的实现源码几乎没经过我&#xff0c;而是AI百老师。我主要负责了对应的调试以及根据我想要的功…

敏感信息提取插件-CaA(三)

0x01 简介 CaA是一个基于BurpSuite Java插件API开发的流量收集和分析插件。它的主要作用就是收集HTTP协议报文中的参数、路径、文件、参数值等信息&#xff0c;并统计出现的频次&#xff0c;为使用者积累真正具有实战意义的Fuzzing字典。除此之外&#xff0c;CaA还提供了独立的…

Python 框架安全:Django SQL注入漏洞测试.(CVE-2021-35042)

什么是 Django 框架 Django 是一个用 Python 编写的 Web 应用程序框架。它提供了许多工具和库&#xff0c;使得开发 Web 应用程序变得更加容易和高效。Django 遵循了“MTV”&#xff08;模型-模板-视图&#xff09;的设计模式&#xff0c;将应用程序的不同组件分离开来&#x…

Day2 | Java基础 | 2 数据类型

Day1 | Java基础 | 2 数据类型 基础版staticstatic的用法static修饰内部类static修饰方法static修饰变量static修饰代码块 深入分析static小结 问题回答版参数传递形参和实参的区别是什么&#xff1f;Java是值传递还是引用传递&#xff1f;值传递和引用传递的区别是什么&#x…

Python-VBA函数之旅-reversed函数

目录 一、reversed函数的常见应用场景 二、reversed函数使用注意事项 三、如何用好reversed函数&#xff1f; 1、reversed函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a; https://blog.csdn.net/ygb_10…

Infuse for Mac激活版:高清影音播放软件

对于热爱影音娱乐的Mac用户来说&#xff0c;Infuse for Mac是一个不容错过的选择。它以其简洁的操作界面和强大的播放功能&#xff0c;为用户带来了全新的影音播放体验。 Infuse for Mac支持广泛的音视频格式&#xff0c;无需额外转换&#xff0c;即可轻松播放您喜爱的影片。无…

Centos 中如何汉化man命令

刚学Linux&#xff0c;记不住命令和选项&#xff0c;很依赖里面的 man 查看命令&#xff0c;但因为着实看不懂&#xff0c;有没有什么办法把man查看命令的信息改成中文 在CentOS 7中&#xff0c;你可以通过安装man-pages-zh包来获取中文的man手册。以下是具体的步骤&#xff1a…

unity ui 同屏

一共有三个摄像机&#xff0c;上屏&#xff0c;下屏 和 类似照相机的ccamera 类似照相机的ccamera的设置&#xff1a; 下屏摄像机设置&#xff1a; 下屏交互的Canvas设置&#xff1a; 新建一个canvas&#xff0c;下面放上rawimage&#xff1a; 如果下屏不想显示的内容&#xf…

【WEEK11】 【DAY2】Employee Management System Part 3【English Version】

2024.5.7 Tuesday Continuing from 【WEEK11】 【DAY1】Employee Management System Part 2【English Version】 Contents 10.4. Login Functionality10.4.1. Modify index.html10.4.2. Main Page Style Missing After Login Failure10.4.3. Create LoginController.java10.4.4…

【stomp 实战】spring websocket用户消息发送源码分析

这一节&#xff0c;我们学习用户消息是如何发送的。 消息的分类 spring websocket将消息分为两种&#xff0c;一种是给指定的用户发送&#xff08;用户消息&#xff09;&#xff0c;一种是广播消息&#xff0c;即给所有用户发送消息。那怎么区分这两种消息呢?那就是用前缀了…

通过 Java 操作 redis -- list 列表基本命令

目录 使用命令 lpush&#xff0c;lrange&#xff0c;rpush 使用命令 lpop 和 rpop 使用命令 blpop&#xff0c;brpop 使用命令 llen 关于 redis list 列表类型的相关命令推荐看Redis - list 列表 要想通过 Java 操作 redis&#xff0c;首先要连接上 redis 服务器&#xff…

抽象类基本概念

抽象类及抽象方法 概念&#xff1a;一个类中没有包含足够的信息来描绘一个具体的对象&#xff0c;这种类被定义为抽象类&#xff0c;含有抽象方法的类也被称为抽象类。 用通俗的话来说就是当一个类的某个功能&#xff08;方法&#xff09;实现不确定时&#xff0c;我们就将该…

【Hadoop】MapReduce (七)

MapReduce 执行流程 MapTask执行流程 Read&#xff1a;读取阶段 MapTask会调用InputFormat中的getSplits方法来对文件进行切片切片之后&#xff0c;针对每一个Split&#xff0c;产生一个RecordReader流用于读取数据数据是以Key-Value形式来产生&#xff0c;交给map方法来处理…

RAFT:引领 Llama 在 RAG 中发展

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Java面试八股文(MySQL篇)

数据库三范式 数据库事务介绍 索引介绍 SQL优化手段 mysql union 与 union all 语法及用法 并发事务带来的问题 大表如何优化 索引类型介绍 MYSQL数据库锁介绍