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

撤回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.dtcms.com/a/350858.html

相关文章:

  • 算法训练营day62 图论⑪ Floyd 算法精讲、A star算法、最短路算法总结篇
  • C# 中常见的 五大泛型约束
  • [系统架构设计师]应用数学(二十一)
  • 云计算学习笔记——Linux用户和组的归属权限管理、附加权限、ACL策略管理篇
  • 联邦雪框架FedML自学---第四篇---案例一
  • 浅谈:运用幂的性质
  • 程序的“烽火台”:信号的产生与传递
  • 【基础-单选】使用http发起网络请求,需要以下哪种权限?
  • C6.2:小信号、交流电流增益分析
  • 立轴式小型混凝土搅拌机的设计含14张CAD
  • 客户生命周期价值帮助HelloFresh优化其营销支出
  • 快速了解工业相机中的连续采集、软触发、硬触发和同步触发以及PTP同步触发
  • Spring介绍
  • Linux iptables 防火墙
  • Linux网络编程基础API
  • [灵动微电子六步换向(方波控制)方案MM32BIN560C] 六步换向实现和规律
  • PostgreSQL诊断系列(2/6):锁问题排查全攻略——揪出“阻塞元凶”
  • RK3568 Linux驱动学习——pinctrl和gpio子系统
  • onnx入门教程(四)——ONNX 模型的修改与调试
  • Day24: NumPy 奥德赛:用科学计算的魔法征服数据宇宙!
  • 32.Ansible平台搭建
  • 2024年09月 Python(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • NFC线圈设计计算
  • 力扣热题——前K个高频元素
  • 记一次Arrays.asList集合删除的错误
  • Java vs Kotlin 在实际开发中的主要区别与面试题总结
  • 太阳光模拟器在国防军工中的应用
  • k8s-容器化部署论坛和商城服务(小白的“升级打怪”成长之路)
  • K8s Pod驱逐机制详解与实战
  • SpringBoot防重放攻击的5种实现方案