You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

基于Gerrit分离头指针修改提交后,推送新Patchset是否需使用强制推送(force)参数?

关于Gerrit推送新Patchset的命令选择问题

先复盘下你的操作流程:

  • 从Gerrit拉取指定变更:git fetch <repoURL> refs/changes/<xx/yyyyyy/z> && git checkout FETCH_HEAD,进入分离头指针状态
  • 新增提交补充内容,再通过git rebase -i HEAD~2合并两个提交,且保留了原Gerrit变更的Change ID

现在核心问题:推送新Patchset用普通的git push <repoURL> HEAD:refs/for/branch,还是必须加-f强制推送?

答案是不需要使用强制推送,直接用普通的git push命令就可以。

原因很简单:Gerrit识别同一个变更的核心是提交信息里的Change-Id字段——只要你合并后的提交里保留了原来的Change ID,Gerrit就会把这次推送识别为同一个变更的新Patchset,而非全新变更。

那什么时候才需要git push -f?一般是当你已经推送过某个Patchset,之后又改写了这个Patchset的历史(比如在已推送的Patchset基础上做了rebase或修改提交历史),此时Gerrit会检测到本地提交和远程已有Patchset历史不一致,才需要强制推送覆盖。但你的场景是基于拉取的原始变更做的新增+合并,只要Change ID没丢,普通推送完全没问题,Gerrit会自动关联到原变更生成新的Patchset。

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

火山引擎 最新活动