首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >删除git提交的历史,只保留最后提交

删除git提交的历史,只保留最后提交

作者头像
YaoQi
发布2026-05-20 13:09:51
发布2026-05-20 13:09:51
1080
举报

要删除 Git 仓库的所有历史提交,只保留最后的状态,最核心的思路是创建一个没有历史记录的新分支,然后强制覆盖主分支

以下是具体操作步骤(请确保在执行前备份好代码,或者在确定不需要历史记录的情况下执行):

第一步:创建一个无历史的新分支

基于当前最新的代码状态,创建一个名为 latest 的孤立分支(没有任何父提交历史):

代码语言:javascript
复制
git checkout --orphan latest

第二步:将当前所有文件加入暂存区

将当前工作目录下的所有文件添加到新分支的暂存区中:

代码语言:javascript
复制
git add -A

第三步:提交这唯一的一次记录

将暂存区的内容提交,这将成为新仓库的第一次也是唯一一次提交:

代码语言:javascript
复制
git commit -m "Initial commit: retain only the latest state"

第四步:删除旧的主分支

删除带有漫长历史的旧主分支(通常是 mainmaster):

代码语言:javascript
复制
# 如果你的主分支是 main
git branch -D main

# 如果你的主分支是 master
git branch -D master

第五步:将当前分支重命名为主分支

将刚才创建的 latest 分支改名为 mainmaster,使其成为默认分支:

代码语言:javascript
复制
# 重命名为 main
git branch -m main

# 或者重命名为 master
git branch -m master

第六步:强制推送到远程仓库

因为新的主分支历史和远程仓库的历史完全不同,必须使用 --force 强制推送覆盖远程仓库:

代码语言:javascript
复制
# 将main强制推送到远程
git push -f origin main
# 或者是master
git push -f origin master

💡 补充说明

  1. 协作者影响强制推送会重写远程历史。如果有其他人正在使用这个仓库,他们本地的历史将与你冲突。他们需要删除本地仓库重新克隆,或者执行硬重置:
代码语言:javascript
复制
    git fetch origin
    git reset --hard origin/main
  1. 清理仓库这种方法只是在逻辑上切断了历史的访问,但 .git 目录中可能仍然存在之前的旧对象(占用磁盘空间)。如果你想彻底清理 .git 目录的体积,可以在强制推送后执行:
代码语言:javascript
复制
    git reflog expire --expire=now --all
    git gc --prune=now --aggressive

远程仓库,一般会有自动的gc,或者去仓库管理页面手动触发下gc动作

最简单粗暴的方法

如果你根本不想敲这些命令

可以直接把项目文件夹里除了 .git 以外的所有文件复制出来备份,然后删掉整个项目文件夹,重新 git init,把备份的文件放进去,提交,并强行推送到远程覆盖。 效果是一样的

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-05-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 漫跑的小兔 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步:创建一个无历史的新分支
  • 第二步:将当前所有文件加入暂存区
  • 第三步:提交这唯一的一次记录
  • 第四步:删除旧的主分支
  • 第五步:将当前分支重命名为主分支
  • 第六步:强制推送到远程仓库
  • 💡 补充说明
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档