樱桃采摘后的gerrit推送

问题描述 投票:0回答:1

我已经阅读了一些帖子,甚至询问了 chatGPT,尝试了给定的解决方案,但仍然存在问题。故事是先提交 A,然后完成 B 和 C。 然后突然需要回滚到A并对其进行一些更改,然后将其推送并合并。 所以现在我们有提交 D,它被推送并合并,不包括 B 和 C。 现在我需要应用提交 B 和 C 中的所有更改。 我从 B 和 C 中挑选了一个,又更改了一个文件,编译,输入

git add .
git commit -m "apply skipped changes"
,然后尝试
git push origin HEAD:refs/for/main
,但在最后一个命令中我得到了
[remote rejected]...(change https://git..../+/452237 closed)
。然后我尝试了
git commit --amend
并删除了changeId。然后又推了还是推不了,同样远程拒绝
[remote rejected]...(change https://git..../+/452237 closed)

git gerrit cherry-pick
1个回答
0
投票

推送失败,因为它在关闭时尝试为待定更改

452237
创建新的补丁集。如果变更被关闭,则它要么是 merged 要么是 abandoned

在Change页面找到

452237
的Change-Id。您正在推送的一个或多个新提交具有相同的 Change-Id(由于cherry-pick)。

git log --grep=<Change-Id>

# Or narrow the range
git fetch origin <targetbranch>
git log FETCH_HEAD..HEAD --grep=<Change-Id>

当您使用

452237
将此类提交推送到同一分支时,Gerrit 会尝试为
452237
创建新的补丁集,而不是创建新的待定更改。

如果

452237
被废弃,想要创建新的补丁集,请先恢复它,然后再次推送。

如果合并了,或者被废弃了,不想创建新的补丁集,可以修改commit,去掉commit消息中的Change-Id,让hook

commit-msg
生成一个新的补丁集Change-Id,然后再次推送,这样就会创建一个新的 Pending Change。

修改提交消息,如果该提交是最后一次提交,可以使用

git commit --amend
。如果不是,假设是
abc123
,您可以使用
git rebase -i abc123~
,并使用
r
reword
编辑
abc123
的提交消息。通过编辑,需要删除Change-Id行,以便hook生成新的Change-Id。

有时,您可能希望在

git push
之前从本地分支中删除本地提交。如果这是最后一次提交,请使用
git reset HEAD^ --hard
删除它。如果不是,您也可以使用
git rebase -i abc123~
并使用
d
drop
将其删除。

© www.soinside.com 2019 - 2024. All rights reserved.