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

git revert和git reset工作中使用

git revert 和 git reset 都是用来修改 Git 提交历史的工具,但它们的用途和效果有所不同。以下是它们的主要区别和在工作中的使用场景:

1. git revert

功能git revert 用于撤销一个或多个已经提交的更改,但不会修改历史记录。它会创建一个新的提交,这个提交会反作用于指定的提交,从而“撤销”这些提交的内容。

适用场景

  • 需要保留历史记录:当你需要撤销一个提交的效果,但希望保留提交历史和日志不变时,使用 git revert 是合适的。
  • 公共分支:在团队协作中,如果你要撤销已经推送到远程仓库的提交,使用 git revert 是安全的,因为它不会改变提交历史,而是通过创建新的撤销提交来实现。

示例
假设你的提交历史是 A -> B -> C,你想撤销 B 的更改,但保留 A 和 C,可以使用:

git revert <B>

这会创建一个新的提交 D,其效果是撤销 B 的更改。

2. git reset

功能git reset 用于将当前分支的 HEAD 移动到一个特定的提交,可以改变暂存区和工作目录的状态,具体行为取决于重置模式(soft, mixed, hard)。

适用场景

  • 修改提交历史:当你需要重新组织提交,移除一些提交或调整工作目录时,可以使用 git reset
  • 本地工作:在处理本地提交历史时(例如,修改本地未推送的提交),git reset 是有用的。对于已经推送到远程仓库的提交,通常不推荐使用 git reset,因为它会重写历史,可能会影响其他团队成员。

重置模式

  • 软重置(–soft):将 HEAD 移动到指定提交,但保留工作目录和暂存区的更改。适用于需要修改最近的提交但保留代码更改的情况。

    git reset --soft <commit_hash>
    
  • 混合重置(–mixed):将 HEAD 移动到指定提交,保留工作目录的更改,但暂存区会被重置。适用于撤销提交并取消暂存区的更改,但保留工作目录中的代码。

    git reset --mixed <commit_hash>
    
  • 硬重置(–hard):将 HEAD 移动到指定提交,工作目录和暂存区都会被重置到指定提交的状态。适用于完全丢弃本地更改,并恢复到某个特定提交的状态。

    git reset --hard <commit_hash>
    

示例
假设你的提交历史是 A -> B -> C,你想撤销最近的提交 C,并保留 A 和 B 的内容,可以使用:

git reset --hard <B>

这会将 HEAD 移动到 B,同时丢弃 C 的更改。

总结

  • git revert:用于撤销某次提交的效果,但保留提交历史,适合在公共分支上使用。
  • git reset:用于修改提交历史,适合在本地分支上使用,可以重置到某个提交点,具体行为取决于使用的模式。

在工作中,选择使用哪个命令取决于你对历史记录的需求和当前的协作环境。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Prometheus 常见参数
  • 【自学深度学习梳理3】卷积神经网络
  • 【链表OJ】常见面试题 3
  • Linux kill命令给进程发信号
  • 寻找二叉树中两个节点的最低公共祖先
  • 2024小学生古诗文大会暑期备考:吃透历年真题和知识点(持续)
  • 简单的docker学习 第1章 docker 概述
  • springcloud loadbalancer nacos无损发布
  • 【数据结构】线段树
  • 临床数据科学中如何用R来进行缺失值的处理(上)
  • 24/8/6算法笔记 不同核函数
  • 读友好的缓存淘汰算法
  • Go语言依赖管理:如何配置和恢复Go模块镜像
  • 【python】Linux升级版本
  • python 装饰器记录函数用时
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 0x05 Python数据分析,Anaconda八斩刀
  • Angular数据绑定机制
  • echarts的各种常用效果展示
  • ECMAScript6(0):ES6简明参考手册
  • Git初体验
  • Magento 1.x 中文订单打印乱码
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • PhantomJS 安装
  • Protobuf3语言指南
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Travix是如何部署应用程序到Kubernetes上的
  • WebSocket使用
  • 测试如何在敏捷团队中工作?
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 聚类分析——Kmeans
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 哈罗单车融资几十亿元,蚂蚁金服与春华资本加持 ...
  • ​Java基础复习笔记 第16章:网络编程
  • ​LeetCode解法汇总2808. 使循环数组所有元素相等的最少秒数
  • ​一些不规范的GTID使用场景
  • "无招胜有招"nbsp;史上最全的互…
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #Spring-boot高级
  • (2)nginx 安装、启停
  • (3)(3.2) MAVLink2数据包签名(安全)
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第2节(共同的基类)
  • (java)关于Thread的挂起和恢复
  • (第27天)Oracle 数据泵转换分区表
  • (四)JPA - JQPL 实现增删改查
  • (转)Groupon前传:从10个月的失败作品修改,1个月找到成功
  • .bat批处理出现中文乱码的情况
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .NET 指南:抽象化实现的基类
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .net分布式压力测试工具(Beetle.DT)
  • // an array of int
  • ::前边啥也没有
  • [.net 面向对象程序设计进阶] (19) 异步(Asynchronous) 使用异步创建快速响应和可伸缩性的应用程序...