如何在Gerrit仓库的master和release分支仅保留初始与最新提交?
Gerrit分支保留指定提交的操作方案
场景一:同时保留初始提交和最新提交
如果需要保留仓库创建时的初始提交,以及当前最新提交,可按以下步骤操作(以master分支为例,release分支操作完全一致):
- 克隆仓库到本地:
git clone <你的Gerrit仓库地址> - 切换到目标分支:
git checkout master - 获取初始提交的哈希值(仓库最早的那个提交):
把输出的哈希值记为git rev-list --max-parents=0 HEAD<initial-commit-hash> - 获取最新提交的哈希值:
记为git rev-parse HEAD<latest-commit-hash> - 创建基于初始提交的临时分支:
git checkout -b temp <initial-commit-hash> - 将最新提交的内容复制到临时分支:
如果出现冲突,手动解决后执行git cherry-pick <latest-commit-hash>git cherry-pick --continue完成操作 - 切回原分支并重置到临时分支状态:
git checkout master git reset --hard temp - 删除临时分支:
git branch -D temp - 强制推送到Gerrit仓库(需确保你有Gerrit的强制推送权限,若无则联系管理员开启):
git push origin master --force
场景二:仅保留最新提交(优先选择)
如果初始提交不重要,只需要保留最新提交的内容,操作更简单:
- 克隆仓库到本地:
git clone <你的Gerrit仓库地址> - 切换到目标分支:
git checkout master - 创建一个无历史的孤儿分支:
git checkout --orphan new-branch - 添加所有当前文件到暂存区:
git add -A - 提交当前状态作为新的根提交:
git commit -m "保留最新提交内容" - 切回原分支并重置到新分支状态:
git checkout master git reset --hard new-branch - 删除临时分支:
git branch -D new-branch - 强制推送到Gerrit仓库:
git push origin master --force
注意事项
- Gerrit默认禁用强制推送,需要在项目的「Access」设置中,给对应用户组开启「Force Push」权限,否则推送会失败
- 操作完成后,其他协作开发者需要同步本地分支:
git fetch origin git reset --hard origin/master # 对应分支替换成release即可 release分支的操作步骤和master完全一致,只需把命令中的分支名替换为release
内容的提问来源于stack exchange,提问作者user4948798
相关产品推荐
相关产品推荐

