【问题标题】:Git Push to remote rejected due to abandon change由于放弃更改,Git Push to remote 被拒绝
【发布时间】:2019-01-08 13:54:37
【问题描述】:
我在 Git 的 Gerrit 中遇到了这个问题。
- 我进行了更改(分支 ONE)并从 eclipse 推送到 gerrit(比如更改 Id-240)。但未合并。
- 接下来,我又创建了一个分支 (branch-TWO),并在不修改之前的提交的情况下提交更改。所以得到了新的 gerrit 更改 ID(例如更改 id-241)。
- 接下来,我放弃了changeId 240。
- 现在,当我尝试从分支 TWO 推送更改时,它说远程被拒绝,因为它试图推送到 changeid 240 而不是 241。为什么?
我尝试过的——
通过互联网阅读可能的解决方案后,我进行了硬重置,并且我对 changeId-241 的更改消失了。
我虽然从 reflog 拿回来了。
但是,当我尝试 checkOut branch-ONE(进行硬重置)时,我对 changeId-241 的更改消失了。
我正在尝试遵循这一点 -
Git merge pending due to an abandoned commit
【问题讨论】:
标签:
eclipse
git
gerrit
egit
【解决方案1】:
如果您想推送两个更改以供审核,则要么恢复已放弃的更改并尝试再次推送,要么使用带有交互选项的 rebase 命令 (git rebase -i HEAD~2) 更新已放弃更改的提交消息,从提交消息中删除“更改 ID”行,以便 gerrit 不会尝试上传新的补丁集来放弃更改,而是会上传新的更改。
如果您只想上传最新的提交,则使用相同的 rebase 命令从本地存储库中删除放弃的更改。
git rebase -i HEAD~2
【解决方案2】:
不可能确定你做了什么,但似乎你有这样的事情:
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,因此您可以根据需要修改提交,并根据需要在 Gerrit 中提交/放弃更改。