git 推错东西到仓库,怎么删记录跟没发生事情一样

Git 撤销提交的两种方法:git reset 和 git rebase

在 Git 中,撤销提交是一个常见的操作,尤其是在提交了错误的代码或信息时。本文将介绍两种常用的撤销提交方法:git reset 和 git rebase,并通过实际场景演示如何使用它们。

1. 使用 git reset 撤销提交

1.1 作用

git reset 用于移动 HEAD 指针并可选地更改暂存区和工作目录的状态。它常用于撤销提交、取消暂存文件、修改提交内容等操作。

1.2 语法

1.2.1 撤销提交,保留修改
bash 复制代码
git reset --soft HEAD~1
  • 作用:撤销最新的提交,但保留所有更改在工作目录中。你可以重新提交并修改提交信息。
  • 适用场景:当你想要修改提交信息或重新组织提交内容时。
1.2.2 撤销提交,取消暂存的文件
bash 复制代码
git reset HEAD~1
  • 作用:撤销最新的提交,并将暂存区的文件取消暂存,但保留在工作目录中。
  • 适用场景:当你想要重新选择要暂存的文件时。
1.2.3 撤销提交,丢弃修改
bash 复制代码
git reset --hard HEAD~1
  • 作用:撤销最新的提交,并丢弃所有更改,包括暂存区和工作目录中的文件。
  • 适用场景:当你想要完全回到上一个提交的状态时。
1.2.4 将 HEAD 指针移动到指定的提交
bash 复制代码
git reset --hard <commit-hash>
  • 作用:将 HEAD 指针移动到指定的提交,并丢弃所有更改。
  • 适用场景:当你想要回滚到历史提交状态时。

1.3 撤销实操

假设你误操作提交了两次错误的记录,现在想要撤销这些提交。

1.3.1 撤销最近两次提交
bash 复制代码
git reset HEAD~2
  • 作用:将 HEAD 指针移动到前两次提交之前的状态,保留工作目录中的更改。
  • 结果:本地代码恢复到没有提交这两个记录前的状态。
1.3.2 强制推送到远程仓库
bash 复制代码
git push --force
  • 作用:将本地仓库的状态强制推送到远程仓库,覆盖远程仓库的提交历史。
  • 注意:这是一个危险的操作,确保本地代码和远程代码是相关的。

1.4 重要提示

  • 使用 --force 选项会覆盖远程仓库的提交历史,确保你了解其风险。
  • git push --force 是 git push origin <branch-name> --force 的简写。

2. 使用 git rebase 撤销提交

2.1 场景复现

假设你有以下三个提交记录:

bash 复制代码
commit def5adef853da4cc05752bdb36577c127be71ba5
Author: xxx
Date:   Thu Dec 28 16:01:36 2017 +0800
优化代码

commit 853dadef5adef4cc05752bdb36577c127be71ba5
Author: xxx
Date:   Thu Dec 28 16:01:36 2017 +0800
增加文件

commit f36801544670e00b2f59a28e19017d2786c4085e
Author: xxx
Date:   Thu Dec 28 15:59:46 2017 +0800
修复

现在你不需要第二个提交(即"增加文件"这个操作),想要将其从提交历史中删除。

2.2 使用 git rebase 删除指定提交

2.2.1 使用 git rebase --onto
bash 复制代码
git rebase --onto master~2 master~1 master
  • 作用 :将 master 分支从第二个提交(853dade)开始的部分重新基于第一个提交(f368015)之上,从而删除第二个提交。
  • 结果:提交历史中将不再包含"增加文件"这个提交。
2.2.2 使用 git rebase -i
bash 复制代码
git rebase -i f368015
  • 作用 :进入交互式 rebase 模式,将需要删除的提交前面的 pick 改为 drop,然后保存退出。
  • 结果:提交历史中将不再包含"增加文件"这个提交。

2.3 强制推送到远程仓库

bash 复制代码
git push --force
  • 作用:将本地仓库的状态强制推送到远程仓库,覆盖远程仓库的提交历史。
  • 注意:这是一个危险的操作,确保本地代码和远程代码是相关的。

2.4 修改提交的 Author

如果你只是想修改某个提交的 Author 信息,可以使用以下命令:

bash 复制代码
git rebase -i f368015
  • 步骤 :
    1. 将需要修改的提交前面的 pick 改为 edit。
    2. 执行 git commit --amend --author="新的作者信息"。
    3. 执行 git rebase --continue 完成 rebase 过程。

总结

  • git reset:适合撤销最近的提交,尤其是当你想要保留或丢弃工作目录中的更改时。
  • git rebase:适合删除或修改历史提交,尤其是当你想要删除某个特定的提交时。

无论使用哪种方法,强制推送(git push --force)都是一个危险的操作,务必谨慎使用。

相关推荐
变与不变8066 小时前
jQuery怎么使用
前端·javascript
神膘护体小月半6 小时前
flex 布局的 order 属性
前端·css
paopaokaka_luck6 小时前
流浪动物救助与收养系统(DeepSeek AI对话、 ECharts多维分析、救助流程衔接、领养与回访衔接、 捐赠确认与公示、志愿者协作)
java·前端·javascript·人工智能·mysql·echarts·推荐算法
仰望.6 小时前
vue 表格组件 vxe-table 树表格懒加载支持拖拽排序的详细用法
前端·javascript·vue.js·vxe-table
前端 贾公子6 小时前
vite-plugin-uni-manifest 升级指南
前端
小码哥_常6 小时前
iPhone 用户传了张 HEIC,我的前端崩了
前端
小码哥_常7 小时前
你发的原图可能暴露你家地址——聊聊图片 EXIF 隐私
前端
java1234_小锋7 小时前
【技术专题】CSS3 网页技术 - CSS3 优先级
前端·css·css3
鸿蒙开发8 小时前
共享 Schema 与 SchemaFactory
前端·后端·harmonyos
屏什么录8 小时前
录屏超过两小时就卡顿崩盘?从参数调优到代码实现,一文彻底搞定长时间录屏
前端·音视频开发