gerrit不能对一个已经merge/abandon的change进行再次提交

本文详细介绍了在使用Gerrit进行代码审查时,遇到的'change…closed'错误信息的解决方法。主要分为两种情况:当尝试推送包含已关闭变更的提交时,或在变更被闭合后尝试提交审批标签。文章提供了具体的解决方案,帮助开发者正确处理已关闭的变更,避免错误发生。

With this error message Gerrit rejects to push a commit or submit a review label (approval) to a change that is already closed.

When Pushing a Commit

This error occurs if you are trying to push a commit that contains the Change-Id of a closed change in its commit message. A change can be closed either because it was already submitted and merged or because it was abandoned.

If the change for which you wanted to upload a new patch set was already submitted and merged you may want to push your commit as a new change. To do this you have to remove the Change-Id from the commit message as explained here and ideally generate a new Change-Id using the commit hook or EGit. Before pushing again it is also recommended to do agit rebase to base your commit on the submitted change. Pushing again should now create a new change in Gerrit.

If the change for which you wanted to upload a new patch set was abandoned and your new changes overcome the reasons for abandoning this change you may want to restore the change in the Gerrit WebUI (browse the abandoned change in the Gerrit WebUI and click on the Restore Change button). Afterwards the push should succeed and a new patch set for this change will be created.

When Submitting a Review Label

This error occurs if you are trying to submit a review label (approval) using the ssh review command after the change has been closed. A change can be closed because it was submitted and merged, because it was abandoned, or because the patchset to which you are submitting the review has been replaced by a newer patchset.


✅ **是的,Gerrit 不允许你向一个已经关闭的 Change 提交新的 Patch Set。** --- ### ❓ 为什么会这样? Gerrit 中的 **Change(变更)** 是一个 Code Review 的实体,一旦它被 **关闭(Closed)**(无论是被合并、被抛弃,还是被手动关闭),Gerrit 就会禁止向这个 Change 提交新的 Patch Set。 这是为了: - 防止对已关闭的评审继续修,破坏评审流程的完整性。 - 保证 GerritChange 的可追溯性和一致性。 --- ### ✅ 解决方法:创建一个新的 Change 如果你需要继续修之前的提交内容,你需要: #### 方法一:基于原提交创建新分支并重新提交 ```bash git checkout -b new_branch <commit_hash> git cherry-pick <commit_hash> # 或者手动修提交内容 git commit --amend -m "new message" -m "Change-Id: Ideadbeefdeadbeefdeadbeefdeadbeefdeadbeef" git push origin HEAD:refs/for/<target-branch> ``` #### 方法二:使用 `git rebase -i` 删除旧提交并重新提交 ```bash git rebase -i HEAD~2 # 将旧提交标记为 drop git add . git commit -m "new change" -m "Change-Id: Ideadbeefdeadbeefdeadbeefdeadbeefdeadbeef" git push origin HEAD:refs/for/<target-branch> ``` #### 方法三:使用 `git format-patch` 和 `git am` 彻底隔离历史 ```bash git format-patch -1 git reset --hard HEAD~ git am 0001-*.patch git push origin HEAD:refs/for/<target-branch> ``` --- ### 🔍 如何判断 Change 是否已关闭? 访问 Gerrit 网页: ``` http://gerrit-server/c/+/Change-Number ``` 如果页面显示: - **Status: MERGED / ABANDONED / CLOSED** - 或提示 “This change is closed and cannot be modified.” 说明该 Change 已关闭,无法再推送 Patch Set。 --- ### ✅ 小结 | 操作 | 是否可以提交 Patch Set | |------|------------------------| | 向已关闭的 Change 提交 | ❌ 不可以 | | 向未关闭的 Change 提交 | ✅ 可以 | | 创建新 Change提交 | ✅ 推荐方式 | ---
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值