当前位置: 首页 > news >正文

git 鼓励频繁提交commit early, commit often,用好分支,多用分支

代码本身很多逻辑是深度耦合的,一个调试/试错可能要改动很多个地方,一不小心污染到无法恢复。所以版本管理要随时回退,并且要做到小颗粒度回退,原子级别回退。

对于代码来说,因为是文本+增量存储(差异存储)+diff算法,使得Git 的存储非常高效,频繁commit和创建分支,存储的开销简直是微不足道,完全是零成本,无负担!所以请尽情commit,尽情分支。

最佳实践:如何更好地 commit?

  1. 保持单一职责(One Change Per Commit)
    每个 commit 只做一件事,避免“大杂烩”式提交。若把几十个修改一次堆到代码里,无论是别人还是自己都很难看出到底要改多少相关地方,哪个先改,哪个后改,为啥不能那么改,为啥必须这么改。
  2. 编写清晰的提交信息
    提交信息应该简洁、明确,遵循 “标题+正文” 格式。

好处:

  • 每个独立的小改动拆分为单独的 commit,有助于保持代码的清晰性。更容易看懂代码的逻辑、思路及推演过程。便于溯源和分析代码历史。
  • 便于排除问题,便于回滚。

分支管理:

      即使是一个人开发的项目,如果是功能简单的小项目,可以一直直接在dev分支开发,简单直观。如果是功能多、模块多、长期开发的项目,也建议每个功能都独立一个 feature 分支上开发。特别是维护多个版本的项目,以及要同步开发多个功能时(一个功能未完全做完,又要应对另一个需求的开发)。

分支管理的个人开发最佳实践:

1. 如果项目较简单或初期开发,直接在 dev 分支开发即可:

  • 快速迭代,减少操作步骤;
  • 适用于独立开发、小项目或 MVP 阶段。

2. 如果项目日益复杂或长期维护,建议使用功能分支模式:

  • 任何独立、重要的特性或修复,单独创建 feature/xxx 分支;
  • 适合需要频繁切换任务、进行实验、维护多个版本的场景。

分支的删除:删除已合并并且不再需要的分支是一个好的实践。

每个独立功能、修复开一个分支

遵循分支命名规范

便于团队协作,提高代码审查效率

Git Commit 提交规范 笔记——Git Commit 提交规范_git提交规范-CSDN博客

https://www.conventionalcommits.org/zh-hans/v1.0.0/

HEAD是指向当前工作目录的指针。

当前分支(Current Branch) --当 HEAD 指向一个分支的最新提交时,该分支就是当前分支。当 HEAD 处于游离(Detached HEAD)状态时,就没有“当前分支”这一说法了。

撤销/还原/重置

特性Undo Commit 撤销最近一次Revert Commit 还原到<hash>Reset Commit 重置到<hash>
操作类型撤销最近的提交创建一个新的提交来撤销指定提交的更改重置分支的历史,回退到某个提交的状态
影响提交历史会撤销最后一次提交,不改变历史不改变历史,创建新的撤销提交会修改提交历史,删除或移动提交
是否修改工作目录保留工作目录和暂存区的修改保留工作目录的更改,创建新的撤销提交可能会丢弃工作目录和暂存区的更改(取决于模式)
适用场景本地开发过程中撤销最近的提交撤销某个提交,但保持历史不变,适用于公共分支重写本地历史,撤销不需要的提交,适用于私有分支
是否创建新提交不会创建新提交,直接撤销会创建新的提交来撤销某次提交的更改不会创建新提交,直接重置到指定的提交
适合的分支类型本地分支(通常是暂时性撤销)公共分支(因为不会修改历史)本地分支,特别是私有分支
对团队协作影响不会影响其他人,除非已经推送到远程仓库不影响其他人,安全地撤销已推送的提交可能会导致团队成员的提交历史不同步,若已推送需要谨慎使用

相关文章:

  • 【SpringBoot+Vue】博客项目开发二:用户登录注册模块
  • 乡村研学旅行小程序(论文源码调试讲解)
  • 行为型模式 - 观察者模式 (Publish/Subscribe)
  • 【华三】从零开始掌握SR技术:原理、架构与应用全解析
  • golang介绍,特点,项目结构,基本变量类型与声明介绍(数组,切片,映射),控制流语句介绍(条件,循环,switch case)
  • 开发一个o2o(线上到线下)商城需要具备以下条件
  • 快速入手-搭建Flask框架封装mysql并结合业务实际情况使用
  • 【MySQL】MySQL用户管理
  • Flask笔记
  • 在 Element Plus 的 <el-select> 组件中,如果需要将 <el-option> 的默认值设置为 null。 用于枚举传值
  • JavaScript 注释
  • LeetCode 解题思路 6(Hot 100)
  • Nginx 配置与常用命令速查手册
  • 神经网络|(十一)|神经元和神经网络
  • Hive-01之数仓、架构、数据类型、DDL、内外部表
  • 纯c#字体处理库(FontParser) -- 轻量、极速、跨平台、具有字体子集化功能
  • 开源程序wordpress在海外品牌推广中的重要作用
  • Qt空项目代码解释
  • Redis SCAN 命令详解:安全遍历海量键的利器
  • SOA(面向服务架构)全面解析
  • 电子商务网站开发实训总结/百度推广怎么样
  • 济南网站建设山东聚搜网咨询/专业做加盟推广的公司
  • 电脑网站开发/淘宝seo什么意思
  • 网络推广营销策划/山东网站seo
  • 淘宝入驻网站建设/广告推广网站
  • 提供深圳网站制作公司/个人网站怎么建立