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

Git 撤销一个已经push到远端仓库的commit

在 Git 中,撤销一个已经推送到远程仓库的改动有几种不同的方法,具体取决于你是否想要完全删除改动,还是只是恢复文件的某个状态。以下是常见的几种方法:

git revert 撤销特定的commit

git revert 是最安全的方法,因为它会生成一个新的 commit 来撤销之前的改动,而不会改变提交历史。
步骤:

1.找到你想要撤销的 commit 的哈希值:

git log

找到要撤销的提交的哈希值(如:abc123)。

2.使用 git revert:

git revert abc123

这会创建一个新的 commit,反向应用你指定的提交的更改。

3.推送新的提交:

git push origin branch_name

优点:不会修改历史记录,只会产生一个新的 commit 来撤销不需要的更改。
缺点:这种方法会导致本地修改也被删除,比如说你想push本地的某一个改动上去,结果不小心push了很多改动,这种操作会导致你的本地改动全部丢失。
在这里插入图片描述

使用 git reset 重置到某个状态

git reset 可以将分支重置到指定的提交点。如果你想要完全撤销推送的改动并修改历史,可以使用这个方法。但这种方式修改历史,可能会影响其他团队成员。

软重置:

如果你不想丢失工作区的更改(比如你想保留修改但不想提交),可以用软重置。

git reset --soft HEAD~1

这个命令会撤销最后一次提交的改动,但保留修改在工作区中。

硬重置:

如果你想要彻底移除提交,并丢弃工作区的更改,可以用硬重置。

git reset --hard HEAD~1

这个命令会重置到上一个 commit,并丢弃工作区中的所有改动。

强制推送:

使用 git reset 之后,你需要强制推送到远程仓库。

git push origin branch_name --force

注意:git reset --hard 会修改提交历史,且需要使用 --force 推送,会覆盖远程仓库的历史记录,其他开发人员的本地仓库可能会因此出问题。通常建议谨慎使用这种方式,特别是在共享的分支上。
使用这种方法需要谨慎,因为这个会修改分支上的提交内容,导致共享分支可能出现问题。

如果有多个提交需要撤销

如果要撤销多个提交(例如最后 3 个提交),可以使用:

git revert HEAD~3..HEAD

或者使用 reset:

git reset --hard HEAD~3
git push --force

总结:

如果想要保留历史记录,使用 git revert。
如果你想完全删除某次提交,并修改历史,使用 git reset 然后强制推送 (–force)。
选择方法时要小心,尤其是在共享分支上修改历史时。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据结构之栈和队列——LeetCode:150. 逆波兰表达式求值,224. 基本计算器,232. 用栈实现队列
  • 深度学习自编码器 - 得益于深度的指数增益篇
  • Qt-QTreeWidget多元素控件(38)
  • 复制他人 CSDN 文章到自己的博客
  • MK米客方德SD NAND参考设计
  • 【Linux篇】常用命令及操作技巧(进阶篇 - 上)
  • 短视频矩阵源码oem/矩阵系统搭建/源码开发注意事项知识分享
  • docker实践与应用举例
  • 【React】获取DOM
  • 2024.9.21 Python与C++的面试八股文整理,类与对象,内存规划,默认函数,虚函数,封装继承多态
  • 【C++前缀和 位运算 贪心 】2680. 最大或值|1912
  • OpenAi以及Dify结合生成Ai模型
  • 408算法题leetcode--第16天
  • 【LeetCode:2535. 数组元素和与数字和的绝对差 + 模拟】
  • 使用 Napkins.dev 将草图转换为应用程序
  • php的引用
  • 自己简单写的 事件订阅机制
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ng6--错误信息小结(持续更新)
  • Python socket服务器端、客户端传送信息
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 大数据与云计算学习:数据分析(二)
  • 二维平面内的碰撞检测【一】
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 技术:超级实用的电脑小技巧
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 腾讯视频格式如何转换成mp4 将下载的qlv文件转换成mp4的方法
  • 携程小程序初体验
  • 异步
  • 原生js练习题---第五课
  • 仓管云——企业云erp功能有哪些?
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • 说说我为什么看好Spring Cloud Alibaba
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • ## 1.3.Git命令
  • #pragma预处理命令
  • #Z0458. 树的中心2
  • #前后端分离# 头条发布系统
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (10)ATF MMU转换表
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (第30天)二叉树阶段总结
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (十三)Flink SQL
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • *p++,*(p++),*++p,(*p)++区别?
  • ./和../以及/和~之间的区别
  • .NET/C# 的字符串暂存池
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET/C# 在 64 位进程中读取 32 位进程重定向后的注册表
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net使用excel的cells对象没有value方法——学习.net的Excel工作表问题
  • .NET项目中存在多个web.config文件时的加载顺序