在项目开发过程中,Git 仓库会随每次修改、推送和发布逐渐累积大量中间提交记录、无效 Tag 和冗余的 Actions 工作流,导致提交历史臃肿、git log 难以阅读,重置或推送时还容易出错。
下面基于实际项目操作记录,介绍如何使用 Git 命令清理这些冗余数据,保持仓库干净整洁,适用于重置提交历史、清理 Tag / Release、重新初始化仓库和批量删除 Actions 工作流。
清理远程提交
清理 Tag
- 清理远程提交前,如果存在 Tag 和 Release,必须先执行本操作。
- 删除本地和远程的 Tag 标签,使后续重置历史时不会因 Tag 冲突而失败。
运行以下命令,查看 Tag:
1
2
3
4
5
6
7
8
| # 查看本地 tag
git tag
# 查看远程 tag
git ls-remote --tags origin
# 查看本地 + 远程 tag
git show-ref --tags
|
运行以下命令,删除 Tag:
1
2
3
4
5
6
7
8
9
10
11
| # 删除本地 Tag(单个)
git tag -d v1.1
# 删除本地 Tag(多个)
git tag -d v1.1 v1.2 v1.3 v1.4
# 删除远程 Tag(单个)
git push origin --delete v1.1
# 删除远程 Tag(多个)
git push origin --delete v1.1 v1.2 v1.3 v1.4
|
运行以下命令,验证删除结果:
1
2
3
4
5
| # 验证删除结果(本地)
git tag
# 验证删除结果(远程)
git ls-remote --tags origin
|
如果存在 Releases,只能手动在网页删除,打开 https://github.com/你的用户名/仓库名/releases,找到要删除的 Release,点击右上角 ...>Delete,确认删除。
重置提交历史
- 将本地 Git 历史压缩为一次提交,并强制推送覆盖远程。
- 操作不可逆,执行前请确认。
运行以下命令,重置 Git 提交历史:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| # 1. 查看提交历史,找到初始提交(位于末尾)
git log --oneline
# 2. 软重置到初始提交,保留所有文件改动(7 位编码)
git reset --soft <commit hash>
# 3. 重新提交(包含所有累积改动)
git add .
git commit -m "重新整理仓库"
# 4. 强制推送(覆盖远程历史)
git push --force-with-lease
# 5. 验证是否仅存两条 Git 记录
git log --oneline
# 6. 如果存在 Tag,重新打 Tag 并推送
git tag v1.1
git push origin v1.1
|
撤回最近一次提交
- 修改最近一次提交的内容,不会增加新的提交记录,而是替换原有的提交。
- 如果已推送到远程,需要强制推送覆盖。
运行以下命令,修正提交(保留修改):
1
2
3
4
5
6
7
8
9
10
11
12
| # 1. 添加修改
git add .
# 2. 修正最后一次提交
git commit --amend --no-edit # 不修改 commit message
git commit --amend # 修改 commit message
# 3. 强制推送覆盖
git push --force-with-lease
# 4. 验证结果
git log --oneline -1
|
重新初始化仓库
- 删除本地所有 Git 提交历史、分支和配置,并推送至新建的 Github 空仓库。
- 操作不可逆,执行前做好项目备份。
登录 GitHub,点击右上角 +>New repository,填写仓库名称等信息后创建空仓库。
运行以下命令,删除本地 .git 文件夹(所有历史、分支、配置都会被清除):
运行以下命令,提交并推送至远程仓库:
1
2
3
4
5
6
| git init
git add -A
git commit -m "初始提交"
git branch -M main
git remote add origin git@github.com:<username>/<repository>.git
git push -u origin main
|
清理本地修改
- 丢弃工作区或暂存区中所有未提交的改动,将本地代码恢复到指定状态。
- 操作不可逆,执行前请确认没有需要保留的修改。
运行以下命令,回退提交:
1
2
3
4
5
6
7
8
| # 回退到上一个提交,丢弃所有改动
git reset --hard HEAD~1
# 回退到指定提交,丢弃所有改动
git reset --hard <commit-hash>
# 拉回远程最新代码(放弃本地所有修改)
git fetch origin && git reset --hard origin/main
|
运行以下命令,删除未跟踪的文件:
1
2
3
4
5
6
7
8
| # 预览会删除哪些文件(安全)
git clean -n
# 删除未跟踪的文件
git clean -f
# 删除未跟踪的文件和目录
git clean -fd
|
运行以下命令,清理分支:
1
2
3
4
5
6
7
8
| # 查看所有本地分支
git branch
# 删除本地分支
git branch -D <分支名>
# 删除远程分支
git push origin --delete <分支名>
|
清理工作流记录
- 批量删除 GitHub Actions 页面上的运行记录,释放页面空间。
- 只删除 Actions 记录,不影响代码、Tag 和 Release。
安装 GitHub CLI
前往 CLI 下载 Windows 版本,或运行以下命令安装(默认安装在 C 盘):
1
| winget install --id GitHub.cli
|
运行以下命令,检查是否已安装:
安装完成后需要重启终端窗口,确认当前在正确的目录:
CLI 授权登录
方式一:网页授权登录:
按照提示,选择 GitHub.com>HTTPS>Login with a web browser,浏览器会打开授权页面,输入 8 位验证码,点击授权。
方式二:Token 登录
登录 GitHub,点击 头像>Settings>Developer Settings>Personal access tokens>Tokens (classic)>Generate new token (classic),勾选 repo、workflow、admin:org 中的 read:org 权限,生成并复制 Token。
运行以下命令,使用 Token 登录:
1
| echo "token" | gh auth login --with-token
|
删除运行记录
运行以下命令,查看记录:
1
2
3
4
5
6
7
8
| # 查看最近 10 条
gh run list --limit 10
# 查看最近 100 条
gh run list --limit 100
# 查看特定分支的记录
gh run list --branch main --limit 100
|
运行以下命令,批量删除运行记录:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 删除最近 100 条
gh run list --limit 100 --json databaseId --jq '.[].databaseId' | xargs -I {} gh run delete {}
# 删除最近 500 条
gh run list --limit 500 --json databaseId --jq '.[].databaseId' | xargs -I {} gh run delete {}
# 删除最近 1000 条(覆盖全部)
gh run list --limit 1000 --json databaseId --jq '.[].databaseId' | xargs -I {} gh run delete {}
# 保留最新一条,删除其余所有
gh run list --limit 1000 --json databaseId --jq '.[].databaseId' | tail -n +2 | xargs -I {} gh run delete {}
# 仅删除 main 分支的记录
gh run list --branch main --limit 100 --json databaseId --jq '.[].databaseId' | xargs -I {} gh run delete {}
|
运行以下命令,验证结果: