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

撤回git 提交

方法一:软重置(--soft 模式)

git reset --soft 会将HEAD指针移动到指定的提交,但不会改变暂存区和工作目录的内容。这种方式适合你只是想撤销提交记录,但是保留已经暂存和修改的内容,方便后续重新提交。

操作步骤如下:

  1. 查看提交历史:使用git log命令查看提交历史,找到你想要撤回所有提交之前的那个提交的哈希值。假设你要撤回最近的175个提交,找到第176个提交的哈希值,记为<commit_hash>
git log
  1. 执行软重置:执行git reset --soft <commit_hash>命令,将HEAD指针移动到指定的提交。
git reset --soft <commit_hash>
  1. 重新提交(可选):如果需要重新提交这些修改,可以修改提交信息后再次提交。
git commit -m "新的提交信息"

方法二:混合重置(默认模式)

git reset (不指定模式,默认是混合模式--mixed)会将HEAD指针移动到指定的提交,同时会把暂存区的内容恢复到指定提交时的状态,但工作目录的内容保持不变。

操作步骤如下:

  1. 查看提交历史:同样使用git log命令找到要撤回所有提交之前的那个提交的哈希值 <commit_hash>
git log
  1. 执行混合重置:执行git reset <commit_hash>命令。
git reset <commit_hash>
  1. 处理工作目录(可选):此时工作目录中可能还保留着之前提交的修改,你可以选择保留修改并重新提交,或者放弃修改。
    • 保留修改并重新提交:可以暂存修改并提交。
    git add.
    git commit -m "新的提交信息"
    
    • 放弃修改:使用git checkout -- <文件> 来丢弃指定文件的修改,或git checkout. 丢弃所有未暂存的修改。
    git checkout.
    

方法三:硬重置(--hard 模式)

git reset --hard 会将HEAD指针移动到指定的提交,同时会把暂存区和工作目录的内容都恢复到指定提交时的状态。这意味着所有未提交的修改都会丢失,使用时要非常谨慎。

操作步骤如下:

  1. 查看提交历史:通过git log命令找到目标提交的哈希值 <commit_hash>
git log
  1. 执行硬重置:执行git reset --hard <commit_hash>命令。
git reset --hard <commit_hash>

此时,你的仓库状态就会完全回到指定提交时的状态,所有后续的提交都被撤回,且未提交的修改也被丢弃。

补充:如果已经推送到远程仓库

如果这些提交已经推送到远程仓库,仅仅在本地仓库执行上述操作是不够的,远程仓库依然保留着这些提交记录。在这种情况下,你需要根据实际需求选择以下方式:

  • 强制推送:在本地执行git reset 操作后,使用git push -f 强制将本地仓库的状态推送到远程仓库,覆盖远程仓库的提交记录。但这种方式可能会给其他协作开发者带来困扰,因为他们的本地仓库与远程仓库状态会不一致,所以在团队协作中使用时要谨慎,最好提前沟通。
  • 使用git revertgit revert 会创建一个新的提交来撤销指定提交的修改,而不是直接删除提交记录。这样不会改变提交历史,对协作更友好。你需要依次对这175个提交执行git revert <commit_hash><commit_hash> 为每个要撤销的提交的哈希值),然后将这些新的提交推送到远程仓库。

总之,选择哪种方式撤回提交,需要根据你的具体需求,以及是否涉及团队协作等因素来综合考虑。

http://www.xdnf.cn/news/18668.html

相关文章:

  • 【龙泽科技】汽车车身测量与校正仿真教学软件【赛欧+SHARK】
  • 什么是共模抑制比?
  • 三坐标如何实现测量稳定性的提升
  • RustFS在金融行业的具体落地案例中,是如何平衡性能与合规性要求的?
  • WRC2025 | 澳鹏亮相2025世界机器人大会,以数据之力赋能具身智能新纪元
  • 大数据毕业设计选题推荐-基于大数据的餐饮服务许可证数据可视化分析系统-Spark-Hadoop-Bigdata
  • LevelDB SSTable模块
  • Consul 在 Windows 上的启动方法
  • 【ACP】2025-最新-疑难题解析-6
  • pytest+requests+Python3.7+yaml+Allure+Jenkins+docker实现接口自动化测试
  • 消息中间件RabbitMQ03:结合WebAPI实现点对点(P2P)推送和发布-订阅推送的Demo
  • 软考中级网络工程师通关指南:从学习到实战
  • 04-Maven工具介绍
  • 从0开始学习Java+AI知识点总结-25.web实战(AOP)
  • KEPServerEX——工业数据采集与通信的标准化平台
  • 服务器(Linux)新账户搭建Pytorch深度学习环境
  • Devops之Jenkins:Jenkins服务器中的slave节点是什么?我们为什么要使用slave节点?如何添加一个windows slave节点?
  • 云计算之中间件与数据库
  • 机器学习:贝叶斯派
  • 2025年金九银十Java面试场景题大全:高频考点+深度解析+实战方案
  • 【C++详解】哈希表概念与实现 开放定址法和链地址法、处理哈希冲突、哈希函数介绍
  • Linux 进阶之性能调优,文件管理,网络安全
  • Java 22 新特性及具体应用
  • c++ 常用接口设计
  • CSS 进阶用法
  • Linux camera 驱动流程介绍(rgb: ov02k10)(chatgpt version)
  • Java 20 新特性及具体应用
  • 关于并查集
  • Text Blocks:告别字符串拼接地狱
  • 量子链(Qtum)分布式治理协议