由于放弃更改,Git Push到远程被拒绝

时间:2018-08-01 05:12:50

标签: eclipse git gerrit egit

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

  1. 我进行了更改(第一个分支),并从日食推到了gerrit(例如更改ID-240)。但未合并。
  2. 接下来,我又创建了一个分支(branch-TWO),并提交更改而不修改到先前的提交。因此得到了新的Gerrit更改ID(例如,更改ID-241)。
  3. 接下来,我放弃了changeId 240。
  4. 现在,当我尝试从第2个分支推送更改时,它说远程被拒绝,因为它正在尝试将Changeid改为241,而不是241。为什么?

我尝试了什么-

通过互联网阅读可能的解决方案后,我进行了硬复位,对changeId-241的更改消失了。 我虽然从reflog回来了。 但是片刻,当我尝试签出branch-ONE(执行HARD重置)时,我对changeId-241的更改消失了。

我正在尝试遵循- Git merge pending due to an abandoned commit

2 个答案:

答案 0 :(得分:1)

无法确定您已经做了什么,但是似乎您有这样的事情:

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

分支2上的COMMIT-2依赖于分支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中提交/放弃其更改。

答案 1 :(得分:0)

如果您要同时推送这两个更改以供查看,请恢复已放弃的更改并尝试再次推送,或者使用带有交互选项的rebase命令(git rebase -i HEAD〜2)来更新已放弃的更改的提交消息,从提交消息中删除“更改ID”行,以使gerrit不会尝试将新的补丁集上载到放弃的更改,而是上载新的更改。

如果您只想上传最新的提交,则使用相同的rebase命令从本地存储库中删除放弃的更改。

git rebase -i HEAD~2