Git push remote被拒绝{change ### closed}

jon*_*ney 39 git gerrit

由于此错误,我在将更改从本地主服务器推送到远程主服务器时遇到问题:

remote: Processing changes: refs: 1, done
To ssh://xxxxx@gerrit.dev.xxxxx.net:29418/xxxxxx
 ! [remote rejected] HEAD -> refs/for/master (change 14823 closed)
error: failed to push some refs to 'ssh://xxxxx@gerrit.dev.xxxxx.net:29418/xxxxxx'
Run Code Online (Sandbox Code Playgroud)

任何想法如何解决这个问题?

git status表示我的分支在5个提交之前超过origin/master.

小智 38

我得到了同样的信息.这是因为我已经设法为两次提交获得相同的Change-Id.也许是因为我当地的分支机构之间的一些挑选或类似的.通过从提交消息中删除Change-Id来解决,然后提交钩子添加了新的Id.

  • 删除change-id将创建新的gerrit更改并产生新的评论。我有类似的情况,但不想失去我的评论和它的历史。 (3认同)

小智 17

您的提交更改ID已过期,即审核14823已关闭.你不能推动相同.

这样做是为了解决问题:

  1. git commit --amend
  2. 删除更改ID
  3. 保存并退出
  4. 新的更改ID将添加到提交中.它可以通过git log验证.
  5. 再推一次

  • 不起作用,它又说“更改已关闭” (2认同)

Ste*_*rne 6

我找到了以下页面,详细说明了由于更改XXXXX已关闭错误而导致您无法将更改推送到原点的原因:https://git.eclipse.org/r/Documentation/error-change-closed.html

干杯!

  • 您在提交评论中有什么?如果它提到更改号码,则可能导致您的问题. (2认同)
  • 是的,它确实.只需将您的提交注释更改为不包含任何change-id,Gerrit将接受您的提交.啧. (2认同)

use*_*115 6

您有 5 次提交。

它们都有一个名为“Commit Message”的文件(由 Gerrit 使用)。
其中一个文件有一个错误的“Change-Id”,该文件已被
Gerrit 接受并合并到 master 中,因此无法再次使用。

一种修复方法是将所有 5 个提交合并为一个,
并在此过程中
删除“Commit Message”文件中的“Change-Id”。

就我而言,我有 3 次提交,所以我这样做了:
git rebase -i HEAD~3

还有其他合并多个提交的方法:
使用 Git 将我最后的 X 次提交压缩在一起


Phi*_*hil 5

如果您已经重新设定基准并选择了与已关闭(合并或放弃)的评论相关的提交,您可以简单地再次重新设定基准,而不是选择,而是删除提交与审查有关。然后您应该能够毫无问题地再次推送。我强烈不同意播放/修改 Change-Ids 的建议。详细说明 git 命令,这将给出:

git fetch; git rebase origin/a_branch --interactive
Run Code Online (Sandbox Code Playgroud)

选择每个提交...修复冲突然后 git add ...

git rebase --continue
git push origin HEAD:refs/for/refs/heads/a_branch
Run Code Online (Sandbox Code Playgroud)

-> 远程拒绝...更改 ### 已关闭

然后执行以下操作:

git fetch; git rebase origin/a_branch --interactive
Run Code Online (Sandbox Code Playgroud)

挑选(pick)每个提交,除了与应该删除(drop)的更改 ### 相关的提交。您不应该有任何冲突并立即成功重新设置基准(冲突已在之前的重新基准中解决)。然后:

git push origin HEAD:refs/for/refs/heads/a_branch
Run Code Online (Sandbox Code Playgroud)