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

继承的3.7GB Bitbucket仓库,如何仅保留指定版本提交?

仓库瘦身操作指南(保留v1.0.0和v2.1.0版本)

前置警告

操作前必须备份原仓库,避免数据丢失:

git clone <你的Bitbucket仓库URL> backup-repo

同时确保Bitbucket仓库已开启允许强制推送(在仓库设置的分支权限里调整)。


正确操作流程

1. 拉取原仓库及所有标签

git clone <你的Bitbucket仓库URL> clean-repo
cd clean-repo
git fetch --tags  # 确保拿到v1.0.0和v2.1.0标签

2. 导出v2.1.0版本的所有文件

切换到v2.1.0标签,把文件导出到临时目录:

git checkout v2.1.0
mkdir ../v2-files
cp -r ./* ../v2-files/  # 复制所有文件(自动排除.git目录)

3. 重置主分支到v1.0.0版本

切换回主分支(如main或master),硬重置到v1.0.0对应的Commit D:

git checkout main
git reset --hard v1.0.0

4. 导入v2.1.0文件并创建新提交

把临时目录的v2.1.0文件覆盖到当前工作区,然后提交:

cp -r ../v2-files/* ./
git add .
git commit -m "tag v2.1.0"  # 提交内容和原v2.1.0完全一致

5. 更新v2.1.0标签到新提交

删除旧标签,重新绑定到刚创建的提交:

git tag -d v2.1.0
git tag v2.1.0

6. 强制推送到远程仓库

推送改写后的主分支和标签:

git push origin main --force  # 强制覆盖远程主分支历史
git push origin --tags --force  # 推送更新后的标签

针对你原有流程的修正说明

  1. 你提到的「rebase后推送」没必要,直接用git reset --hard更直接,能彻底清除中间提交。
  2. 第4步的「合并时保留本地v2.1.0内容」,用上述文件覆盖+重新提交的方式比合并更可靠,避免冲突。如果一定要用合并,可执行:
git merge -s ours origin/main  # 合并远程分支,但完全保留本地内容

但这种方式会留下合并记录,不如直接重置+覆盖干净。
3. 推送时用--force即可(Git 2.30+可用--force-with-lease更安全,避免覆盖他人未推送的变更),--force-upstream和--force效果类似,但前者更明确指向上游分支。

内容的提问来源于stack exchange,提问作者schmat_90

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:05:03