【问题标题】:Git Push to remote rejected due to abandon change由于放弃更改,Git Push to remote 被拒绝
【发布时间】:2019-01-08 13:54:37
【问题描述】:

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

  1. 我进行了更改(分支 ONE)并从 eclipse 推送到 gerrit(比如更改 Id-240)。但未合并。
  2. 接下来,我又创建了一个分支 (branch-TWO),并在不修改之前的提交的情况下提交更改。所以得到了新的 gerrit 更改 ID(例如更改 id-241)。
  3. 接下来,我放弃了changeId 240。
  4. 现在,当我尝试从分支 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 中提交/放弃更改。

      【讨论】:

        猜你喜欢
        • 2018-03-04
        • 2017-12-29
        • 2016-10-30
        • 2019-01-11
        • 2014-06-15
        • 2016-06-02
        • 1970-01-01
        • 2012-05-12
        • 2021-01-26
        相关资源
        最近更新 更多