Git 推送到远程因放弃更改而被拒绝

Git Push to remote rejected due to abandon change

我在 Gerrit 中遇到这个问题,Git。

  1. 我进行了更改(branch-ONE)并从 eclipse 推送到 gerrit(比如更改 Id-240)。但没有合并。
  2. 接下来我又创建了一个分支(branch-TWO)并提交更改而不修改之前的提交。所以得到了新的 gerrit 更改 Id(例如,更改 id-241)。
  3. 接下来我放弃了changeId 240
  4. 现在,当我尝试从 branch-TWO 推送我的更改时,它说 remote rejected 因为它试图推送到 changeid 240 而不是 241。为什么?

我试过的--

通过互联网阅读可能的解决方案后,我进行了硬重置,我对 changeId-241 的更改消失了。 我虽然从 reflog 取回了它。 但是,当我尝试检查 branch-ONE(进行硬重置)时,我对 changeId-241 的更改消失了。

我正在尝试遵循这个 -

不可能确定你做了什么,但你似乎有这样的事情:

BASE --- COMMIT-1              <= branch-1
                \
                 \--- COMMIT-2 <= branch-2

branch-2 上的 COMMIT-2 依赖于 branch-1 上的 COMMIT-1,因此当您自动将 COMMIT-2 推送到 Gerrit 时,您也会推送 COMMIT-1。 Gerrit 将拒绝 COMMIT-1,因为更改 240 已被放弃。

你应该像这样并行工作:

BASE --- COMMIT-1 <= branch-1
   \
    \--- COMMIT-2 <= branch-2

这样 COMMIT-2 就不会依赖于 COMMIT-1,因此您可以根据需要修改提交,并 submit/abandon 根据需要在 Gerrit 中进行更改。

如果你想推送两个更改以供审查,那么要么恢复放弃的更改并尝试再次推送,要么使用带有交互选项的 rebase 命令 (git rebase -i HEAD~2) 更新放弃更改的提交消息,从提交消息中删除 "Change ID" 行,这样 gerrit 就不会尝试将新的补丁集上传到放弃的更改,而是上传新的更改。

如果你只想上传最新的提交,那么使用相同的 rebase 命令从你的本地 repo 中删除放弃的更改。

git rebase -i HEAD~2