You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

保留GitLab仓库当前状态,清除历史提交、分支与问题

实现GitLab仓库重置为全新初始版本的方法

可以通过标准Git命令结合GitLab网页端操作或API实现需求,以下是具体步骤:

一、重置Git提交历史,保留当前文件版本

通过本地Git操作清空提交历史,将当前文件作为初始提交推送到远程:

  1. 创建无历史记录的孤立分支:
git checkout --orphan new-main
  1. 添加当前所有文件到暂存区:
git add -A
  1. 提交初始版本:
git commit -m "Initial commit (cleaned repository history)"
  1. 删除原main分支并将新分支重命名为main:
git branch -D main
git branch -m main
  1. 强制推送覆盖远程main分支(会彻底清除远程历史,操作前确认无重要历史需要保留):
git push -f origin main

二、清理非main分支

网页端操作

  • 进入GitLab仓库的 Repository > Branches 页面
  • 勾选所有非main分支,点击「Delete selected」按钮确认删除

GitLab API批量删除

需要拥有仓库API权限的个人访问令牌,可通过脚本批量处理:

TOKEN="你的个人访问令牌"
PROJECT_ID="目标仓库的项目ID"
GITLAB_URL="你的GitLab实例地址(如https://gitlab.com)"

# 获取所有非main分支名称
branches=$(curl --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/branches?search=!main" | jq -r '.[].name')

# 循环删除分支
for branch in $branches; do
  curl --request DELETE --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/repository/branches/$branch"
done

注:需要提前安装jq工具用于解析JSON响应

三、清理问题、合并请求等仓库内容

网页端操作

  • 问题:进入Issues页面,勾选所有问题,选择「Delete」操作
  • 合并请求:进入Merge Requests页面,先关闭未合并的MR,再勾选所有MR执行删除
  • 标签、里程碑等内容可在对应页面进行批量清理

GitLab API批量清理

删除所有问题

TOKEN="你的个人访问令牌"
PROJECT_ID="目标仓库的项目ID"
GITLAB_URL="你的GitLab实例地址"

# 获取所有问题ID
issues=$(curl --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/issues?state=all" | jq -r '.[].iid')

# 循环删除问题
for issue in $issues; do
  curl --request DELETE --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/issues/$issue"
done

删除所有合并请求

TOKEN="你的个人访问令牌"
PROJECT_ID="目标仓库的项目ID"
GITLAB_URL="你的GitLab实例地址"

# 获取所有合并请求ID
mrs=$(curl --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/merge_requests?state=all" | jq -r '.[].iid')

# 先关闭MR再删除
for mr in $mrs; do
  curl --request PUT --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/merge_requests/$mr?state_event=close"
  curl --request DELETE --header "PRIVATE-TOKEN: $TOKEN" "$GITLAB_URL/api/v4/projects/$PROJECT_ID/merge_requests/$mr"
done

注意事项

  • 强制推送main分支会覆盖远程历史,团队成员需重新克隆仓库,避免拉取旧历史导致冲突
  • 分支、问题、MR的删除操作不可逆,执行前务必确认无需保留相关数据
  • 使用API时,确保个人访问令牌拥有api和write_repository权限,且令牌需妥善保管

内容的提问来源于stack exchange,提问作者Dr. Ske

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 20:20:34