Gerrit意外地引入了一些合并提交(配置了“必要时合并”选项),我想将它们从历史中删除。 我知道团队使用Git时重写历史的缺陷,但在我们的案例中,开发人员不会受此影响,因为他们都没有在这个特定的存储库中进行本地更改。
我在本地做了git rebase -i
,Git自动删除了Gerrit的合并提交。
我在每个提交消息中小心地删除了以前的Gerrit Change-Ids,并且Gerrit提交消息钩子添加了新的。
git status
命令输出:
在分支主机上 你的分支和'origin / master'有分歧, 并分别有7和9个不同的提交。 (使用“git pull”将远程分支合并到你的) 无需提交,工作目录清理
这就是我想要的(9次提交减2次合并提交)。
当我尝试使用git push origin HEAD:refs/for/master
推送Gerrit时,我没有收到任何错误。
但是,当我尝试在Gerrit Web界面上查看和提交时,我收到以下错误:
由于路径冲突,无法合并更改。 请在本地重新定义更改并上传重新提交的提交以供审核。
我做错了什么?
答案 0 :(得分:3)
重写历史记录时,您不会推动审核(不要推送到refs/for/*
)。您需要直接推送到原始存储库(refs/heads/*
)。这意味着您需要在Gerrit中绕过审核的权限。我建议暂时给自己一些权限并在完成后删除它们,这样你就不会在将来意外地绕过审核。
您还需要使用git push
标志运行-f
,告诉git重写历史记录。