我已经阅读了一些帖子,甚至询问了 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)
推送失败,因为它在关闭时尝试为待定更改
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
将其删除。