快捷菜单
常用功能一站直达
更多功能请点顶栏「快捷菜单」
1https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public 这个是我的公开仓库,目前提交了58次commit,但是里面包含了太多的无用commit message信息,我想把这个commit历史情况,并重新提交,该如何操作呢?
以下是清理 Git 仓库提交历史的完整方案,分为 简单重置法 和 深度重写法 两种方案,请根据需求选择:
1# 1. 克隆原仓库(新建一个干净目录)
2git clone https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public.git teek-clean
3cd teek-clean
4
5# 2. 重置所有文件到最新版本(保留当前代码)
6git checkout --orphan new-main # 创建无历史分支
7git add -A
8git commit -m "Initial commit: clean history"
9
10# 3. 强制推送到远程(需有权限)
11git branch -D main # 删除旧分支
12git branch -m main # 重命名新分支
13git push -f origin main # 强制覆盖远程
14
15# 4. 清理本地缓存
16git gc --aggressive --prune=now 1# 1. 克隆仓库到本地
2git clone --bare https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public.git
3cd vitepress-theme-teek-one-public.git
4
5# 2. 使用 git filter-branch 重写历史(示例保留最近3次提交)
6git filter-branch --msg-filter '
7 if [ "$GIT_COMMIT" = "最新提交的hash" ]; then
8 echo "feat: 整理项目结构"
9 elif [ "$GIT_COMMIT" = "某次重要提交hash" ]; then
10 echo "fix: 解决路由问题"
11 else
12 echo "chore: 历史提交整理"
13 fi
14' -- --all
15
16# 3. 强制推送到远程
17git push --force --tags origin 'refs/heads/*'
18
19# 4. 清理空间
20rm -rf .git/refs/original/
21git reflog expire --expire=now --all
22git gc --aggressive --prune=now1# 交互式 rebase 合并提交(适合少量提交整理)
2git rebase -i HEAD~58
3# 在编辑器中将 pick 改为 squash 或 fixupgit clone --mirror 完整备份1git fetch --all
2git reset --hard origin/main提交规范:未来使用 Conventional Commits 规范
1# 示例
2git commit -m "feat: 添加暗黑模式支持"
3git commit -m "fix: 修复移动端布局错位".gitignore:确保已排除 node_modules/, dist/ 等目录
分支策略:
1git checkout -b feature/xxx # 新功能开发
2git checkout -b fix/xxx # 问题修复| 方案 | 保留代码 | 保留部分历史 | 操作复杂度 | 协作者影响 |
|---|---|---|---|---|
| 简单重置法 | ✅ | ❌ | ⭐ | 需重新克隆 |
| 深度重写法 | ✅ | ✅ | ⭐⭐⭐⭐ | 需强制同步 |
推荐个人项目用方案1,团队项目用方案2的交互式rebase简化历史
1git checkout --orphan new-main # 创建无历史分支
2
3这里的--orphan 是什么意思? `--orphan` 是 Git 中一个非常实用的参数,它的作用可以理解为 **"创建一个没有父提交的孤立分支"**。以下是详细解释:
--orphan 的核心作用| 特性 | 说明 |
|---|---|
| 无历史 | 新分支不从任何现有提交继承历史(相当于时间线归零) |
| 保留工作区文件 | 当前目录下的所有文件会被保留(但未进入暂存区) |
| 干净起点 | 适合用来彻底重构提交历史 |
git checkout -b 的区别1# 传统创建分支方式(继承所有历史)
2git checkout -b new-branch
3
4# 孤立分支创建方式(无历史)
5git checkout --orphan new-branch对比效果:
.git/refs 中无父提交指针,git log 显示为空1git checkout --orphan clean-main
2git add . # 重新添加文件
3git commit -m "初始提交" # 这是新仓库的第一个提交1git checkout --orphan docs
2rm -rf * # 删除所有代码文件(非git操作))
3# 然后单独添加文档文件1git checkout --orphan gh-pages.git/refs/heads 创建新分支指针.git/objects 中建立与旧提交的关联git add)cherry-pick 等方式)1原始仓库:
2A <- B <- C <- D (main)
3
4执行 git checkout --orphan new-main 后:
5
6new-main (孤立分支,无历史)
7|
8工作区文件状态与 D 提交完全一致通过这个参数,你可以像处理新仓库一样重新构建提交历史,非常适合需要"历史清零"的场景
1# 1. 克隆原仓库(新建一个干净目录)
2git clone https://cnb.cool/onedayxyy/vitepress-theme-teek-one-public.git teek-clean
3cd teek-clean
4
5# 2. 重置所有文件到最新版本(保留当前代码)
6git checkout --orphan new-main # 创建无历史分支
7git add -A
8git commit -m "Initial commit: clean history"
9
10# 3. 强制推送到远程(需有权限)
11git branch -D main # 删除旧分支
12git branch -m main # 重命名新分支
13git push -f origin main # 强制覆盖远程
14
15# 4. 清理本地缓存
16git gc --aggressive --prune=now修改默认分支,删除某个分支。
日历 · 精选 · 友链 · 更多
如果内容对你有帮助,欢迎请我喝杯咖啡 ☕



One的公众号
爱折腾博客的小白