git撤销第一次commit

前言

使用git时会遇到的情况是很多样的,需要记住的命令不是一般的多,为了方便下次遇到类似情况可以快速找到应该采用的命令,我决定把具体情况时要使用到的命令记录下来。

这次碰到的具体情况是,我才为我的后端springboot项目创建了本地仓库,进行第一次提交,误把application.yml中的敏感信息(如阿里云oss访问密钥)提交到了仓库中😢

与一般情况的不同之处

这种情况与正常的有多次提交撤销最近一次提交的处理方式是不同的,我们试着理解一下

有多次提交撤销最近一次

有多个commit

sql 复制代码
commit A (first) <- commit B <- commit C (HEAD)

每个commit都会有一个parent指针指向前一个commit。 我们的目标是删除commit C,那么只需要使得HEAD移动到当前HEAD的parent commit即可。

这样commit C虽然任然存在,但是不会再被引用,相当于删除了,变成了如下情况

sql 复制代码
commit A (first) <- commit B (HEAD) <- commit C

撤销第一次提交

但是我的情况是,只有一个commit

sql 复制代码
commit A (HEAD, first)

如果我按照多次提交撤销最近一次的方法的话,会发现回不到HEAD的parent commit

解决方法

我们可以执行以下指令

sql 复制代码
git update-ref -d HEAD

执行前后对比

rust 复制代码
# 之前
HEAD -> refs/heads/master -> commit A
​
# 之后  
HEAD -> (deleted)
refs/heads/master -> (deleted)
commit A -> (仍存在但无引用)

执行结果就是

  • HEAD引用被删除: 不再指向任何commit
  • master分支被删除: 分支引用消失
  • commit对象保留: commit A 的数据还在.git目录中
  • 工作目录不变: 您的文件完全不受影响
相关推荐
呆萌的代Ma35 分钟前
Git不强行推送,撤销最近几次的提交
git
透明的玻璃杯3 小时前
git应用
git
炸炸鱼.5 小时前
Git+Jenkins实战(一):从零搭建自动化发布与回滚系统(附完整代码)
git·jenkins
言6667 小时前
要忽略前端依赖包node_modules的文件在目录下 git暂存区消失
git
胡小禾8 小时前
Git Worktree
git
程序员小羊!8 小时前
18 GIt
git
怣疯knight8 小时前
Git 本地分支关联远程分支 常用命令汇总
git
ANNENBERG9 小时前
git分支开发管理
git
坤坤藤椒牛肉面9 小时前
GIT的使用
git
w3296362719 小时前
使用 OpenCode 在 Windows 上加速安装 Playwright 的完整指南
windows·git