goland需手动配置gerrit:先终端带commit-msg钩子clone项目,再用goland打开;提交时必须指定refs/for/main推送目标;修改评审意见后须用--amend复用change-id更新patch set。

GoLand 本身不内置 Gerrit 集成,但能通过标准 Git 操作配合 Gerrit 的 refs/for/* 推送机制完成代码提交与审核。关键不是“配置 Gerrit 插件”,而是让 GoLand 正确调用 Git 并使用 Gerrit 要求的推送格式。
GoLand 中 clone 项目必须带 commit-msg hook
直接点击 Get from VCS 输入 SSH 或 HTTP 地址 clone,会导致缺少 commit-msg 钩子——这会让后续提交无法生成正确的 Change-Id,Gerrit 就拒绝识别为待审核变更。
- 正确做法:先在终端执行带 hook 的 clone 命令(Gerrit 界面会提供):
git clone ssh://username@host:29418/MyProject && cd MyProject && scp -p -P 29418 username@host:hooks/commit-msg .git/hooks/
- 再用 GoLand 打开该本地目录,而不是重新 clone
- 验证钩子是否生效:执行
git commit --allow-empty -m "test"后检查提交信息里是否自动添加了Change-Id: Ixxx...
GoLand 提交代码时必须手动指定 refs/for/* 推送目标
GoLand 默认的 Push 对话框只显示远程分支(如 origin/main),但 Gerrit 不允许推送到真实分支,必须显式推送到 refs/for/main 这类虚拟引用。
GoLand 2026.1.1 是 2026.1 发布后的首个维护修正版本,适合已经开始体验 2026.1 新功能并希望同步补丁的开发者。它更适合用于入门项目、现有项目迁移测试和 IDE 行为验证。
- 在 GoLand 的 Git → Push 窗口中,点击右上角 Modify(或 ...)按钮
- 找到你当前本地分支对应的远程条目,把
main改成refs/for/main(注意不是refs/for/origin/main) - 如果远程别名不是
origin(比如你配了gerrit_me),要确保推送目标写成gerrit_me:refs/for/main - 若没看到远程别名,先在
Settings → Version Control → Git → Remotes中确认已配置正确 remote
GoLand 不会自动处理 Gerrit 审核状态和 Patch Set 更新
当你收到 reviewer 的修改意见后,在 GoLand 里改完代码、再次 commit,**不能**直接 push 到同一分支——那样会创建新 Change,而不是更新原 Patch Set。
- 必须复用原提交的 hash:用
git commit --amend(GoLand 中右键 Commit → Amend commit) - 确保
Change-Id行保留在提交信息中(不要删掉,否则 Gerrit 当作新 Change) - 再次 Push 时,仍需指定相同目标:
origin:refs/for/main,Gerrit 自动识别为 Patch Set 2 - 如果误用了普通 commit(非 amend),可用
git reset --soft HEAD~1回退到暂存区,再 amend 提交
最易被忽略的是 commit-msg 钩子缺失和 --amend 流程跳过——这两个点一旦出错,就会导致 Gerrit 里出现重复 Change 或 Patch Set 断连,审核者看到的是一堆孤立提交,根本没法连续 review。










