基于Gerrit作为中央仓库的Git优化工作流建议咨询
Gerrit本地工作流优化方案
核心思路
直接在dev-branch完成所有操作,保留本地开发历史的同时无需维护额外cl分支,通过Git标记和交互式变基实现开发过程与评审提交的分离,配合工具简化推送流程。
优化后步骤
- 日常开发:在
dev-branch自由提交,保留所有逻辑节点(包括标注WIP/tmp的本地提交),无需创建子分支,直接用git commit记录每一步开发内容。 - 同步上游:准备提交Gerrit前,拉取最新master并变基:
git fetch origin master && git rebase origin/master - 备份本地历史:创建Git标记保存当前
dev-branch的完整开发状态,避免整理提交时丢失历史:git tag dev-backup-$(date +%Y%m%d%H%M) - 整理评审提交:执行交互式变基,将需要提交的逻辑合并为单个整洁提交(编写正式评审用的提交信息),本地历史已通过标记备份,无需担心丢失:
在编辑器中,将冗余的git rebase -i origin/masterWIP/tmp提交标记为squash或fixup,合并到目标提交后保存退出。 - 推送WIP到Gerrit:直接从
dev-branch推送,标记为WIP避免自动进入评审:git push origin HEAD:refs/for/main%wip - 处理评审反馈:直接在
dev-branch修改代码,用--amend更新当前提交,再推送新patchset:git commit --amend -a git push origin HEAD:refs/for/main%wip # 维持WIP状态 # 转为正式评审时去掉%wip git push origin HEAD:refs/for/main - 评审期间继续开发:无需切换分支,直接在
dev-branch新增WIP/tmp提交记录后续开发,这些提交不会影响已推送的Gerrit patchset。 - 更新patchset并整合新开发:当需要将后续开发内容加入评审时,再次执行交互式变基,将新的
WIP提交合并到评审主提交:
标记对应提交为git rebase -i origin/mastersquash后,更新提交信息并推送:git commit --amend git push origin HEAD:refs/for/main - 恢复完整本地历史:若需找回所有开发记录,直接切换到之前创建的标记,或合并回
dev-branch:# 临时查看历史状态 git checkout dev-backup-YYYYMMDDHHMM # 合并历史回dev-branch git checkout dev-branch git merge dev-backup-YYYYMMDDHHMM - CL合并后的清理:同步上游master,继续在
dev-branch开发,可按需清理旧标记:git fetch origin master && git rebase origin/master git tag -d dev-backup-YYYYMMDDHHMM # 可选操作
工具简化建议
使用git-review工具替代手动推送命令,自动处理Gerrit的refs/for路径,简化patchset更新流程:
- 安装后,推送WIP:
git review -w - 更新patchset:
git review - 工具会自动检测当前分支与上游的同步状态,减少手动输入错误。
内容的提问来源于stack exchange,提问作者Stefan Karlsson
相关产品推荐
相关产品推荐

