如何在Gerrit中仅更新最新链式提交而不改动前置提交?
仅更新Gerrit链式提交中最新补丁的方法
当你用git amend更新链式提交的最新补丁时,会导致整个提交链的哈希值变更——因为后续提交的父提交依赖前一个提交的哈希,所以Gerrit会认为所有提交都被修改,触发全量预检查还容易引发冲突。下面是只更新最新提交的正确操作:
操作步骤
- 先确认提交链顺序,比如提交链为
A → B → C(C是你要更新的最新提交),用命令查看:git log --oneline - 切换到最新提交C,创建临时分支存放修改:
git checkout <C的提交哈希> git checkout -b temp-fix - 在临时分支上修改代码,然后更新C的提交内容:
git add . git commit --amend - 切回原开发分支,用
rebase --onto将修改后的C替换原提交链中的旧C:
这里的git checkout <你的原分支名> git rebase --onto temp-fix <B的提交哈希><B的提交哈希>是C的父提交,意思是把原分支中B之后的提交(旧C)替换成temp-fix上的新C。 - 验证提交链,确认只有C的哈希变更,A、B保持不变:
git log --oneline - 推送到Gerrit,此时只有C会生成新的补丁集,A、B不会被触动:
git push origin HEAD:refs/for/<你的目标分支名>
注意事项
- 操作前建议备份原分支:
git branch backup-<分支名>,避免操作失误丢失提交 - 如果提交链更长(比如
A→B→C→D),要更新D的话,只需把rebase --onto的目标父提交改成C的哈希即可 - rebase过程中若出现冲突,只处理和最新提交相关的内容,不要改动前面提交的代码
内容的提问来源于stack exchange,提问作者yair malihi
相关产品推荐
相关产品推荐

