如何重置git分支,清空分支所有提交历史

准备工作

最好先让每台引用了此仓库的电脑,先 git pull 一下,更新到最新状态

在主电脑上重写历史并强制推送

bash 复制代码
# 1. 创建一个没有任何父提交的"孤儿分支"
git checkout --orphan new-main

# 2. 把当前工作区所有文件加入暂存区(会保留 .gitignore 规则)
git add -A

# 3. 创建全新的初始提交
git commit -m "Initial commit (history reset)"

# 4. 删除旧分支,并把当前分支改回原名
git branch -D master
git branch -m master

# 5. 强制推送,覆盖远程历史
git push -f origin master

# 6. 让远程本地引用也指向新的提交
git fetch origin
git branch --set-upstream-to=origin/master master

执行后,远程仓库只剩这一条新提交,.git/objects 里的旧对象在下次 GC 后会被真正释放,仓库体积会明显缩小

在另一台电脑上同步(不重新克隆)

关键动作:不要用 git pull(它会尝试做合并,因历史无关而失败),要用 fetch + reset。

bash 复制代码
# 2. 拉取远程最新的引用,但先不合并
git fetch origin

# 3. 把本地分支硬重置到远程的新历史
git reset --hard origin/main

# 4. 清理可能残留的旧分支引用(可选)
git remote prune origin

执行后,这台电脑的本地分支也指向全新的初始提交,git log 只有一条记录,工作区文件内容保持最新状态

让两台电脑都释放磁盘空间

bash 复制代码
git reflog expire --expire=now --all
git gc --prune=now --aggressive

让git服务器释放空间

bash 复制代码
# 先进入git server容器
docker exec -it d1f7c7d93699 bash

# 去到仓库目录,释放空间
cd /data/git/repositories/<用户名>/<仓库名>.git
git reflog expire --expire-unreachable=now --all
git gc --prune=now
相关推荐
高调的涵涵6 小时前
删了1.2GB,.git仍是1.2GB
git
程序员沉梦听雨7 小时前
【Git】git-submodule子模块管理
git
全栈陈序员1 天前
Git】从入门到精通(八)—— git log:查看提交历史
大数据·git·elasticsearch
7177771 天前
Git自建用什么工具比较好:Gitea、Forgejo、GitLab CE与Gitee的选型对比
git·gitlab·gitea
lsc_blog2 天前
年底还在招的岗位,先确认缺口和到岗要求
git·缓存·ci/cd·职场和发展·github
全栈陈序员2 天前
【Git】从入门到精通(十一)—— git reset 三种模式详解
git·elasticsearch
全栈陈序员2 天前
【Git】从入门到精通(十)—— 撤销与恢复:git checkout与git restore
运维·网络·数据库·git
全栈陈序员3 天前
【Git】从入门到精通(五)—— git add:将文件加入暂存区
大数据·git·elasticsearch
全栈陈序员3 天前
【Git】从入门到精通(七)—— git status:查看仓库状态
大数据·git·elasticsearch
莫晓燚3 天前
Ansible 13 个常用模块---企业实战
git·github