Git推送远程时被拒绝{更改###已关闭}

53

我在将本地主分支推送到远程主分支时遇到了问题,出现了以下错误:

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'

我该怎么解决这个问题?

git status显示我的分支比origin/master超前了5个提交。

19个回答

0

您有5个提交。

每个提交都有一个“提交消息”,其中可能包含一个“Change-Id:”字符串,该字符串标识了该提交属于哪个Gerrit Change Request(请参见https://git.eclipse.org/r/Documentation/user-changeid.html

在这种情况下,由Change-Id字符串标识的一个或多个Change Request已经被Gerrit合并或放弃,因此不能再次使用。

在将它们推送之前,您需要修改一个或多个提交的提交消息(请参见http://schacon.github.io/history.html),要么删除它们以创建新的Change Request,要么修改它们,使它们为每个提交标识正确的Gerrit Change Request。


我来到这里并看到了@johan在下面的回答,但是想要详细说明该怎么做。 - qneill

0

0

EGit用户的解决方案:

  1. 点击Amend按钮 输入图像描述


  1. 使用退格键从提交消息区域中删除Change-Id(这将与此屏幕截图不同)
  2. 点击“添加Change Id”按钮enter image description here

  3. 提交更改并推送。


0

我和我的前辈花了超过1个小时来解决问题,所以我尝试了以下方法,对我有效:

  1. 备份.git/logs/refs/heads/{{branch}}文件夹中的所有分支和更新的文件
  2. 删除导致错误的分支
  3. 创建分支“git branch '{{new branch name}}'”
  4. 将仓库文件移回相关文件夹
  5. git commit -m "{{commit message}}"
  6. git push origin HEAD:refs/for/master

一切都应该很好地完成了。


0

问题可能有几个,但如果问题是您的更改在过时的提交之上(出于任何原因,它可能已合并),您只需要:

步骤1:查找要删除的提交之前的提交 git log

步骤2:检出该提交 git checkout

步骤3:使用当前检出提交创建一个新分支 git checkout -b

步骤4:现在您需要添加已删除提交后面的提交 git cherry-pick

现在将更改推送到gerrit,它应该接受它们。

参见:https://www.clock.co.uk/insight/deleting-a-git-commit


0
试试这个。 git push --no-thin origin xxxxxx:refs/for/sprint/yyyyyy

0

我也遇到了这个问题,当我提交我的代码时终端显示:

![remote rejected] HEAD -> refs/for/android_ui.lnx.1.2.c1-dev(change 1692698 closed)

我去审核网站查看对应的变更1692698,提交信息是:

"第一次启用WiFi热点时提示USB共享网络"

然后在终端中显示提交日志:

  • b49c0f91744cb6f863616976c4fb4157c7af4b8c 当使用Wi-Fi连接时启用USB共享网络时提示不正确。
  • eb47ef919064aff516ced4bbd9d8ade0ed34b107 第一次启用WiFi热点时提示USB共享网络
  • 753668be1207baa514be1bbd985f3db2d6317608 修复热点通知错误。
推送失败的原因是当前的 changID 与 eb47ef919064aff516ced4bbd9d8ade0ed34b107 提交的 changID 相同。所以我备份了当前的更改并将其硬重置为 753668be1207baa514be1bbd985f3db2d6317608,然后依次应用备份更改、添加、提交和推送,最终成功了。
希望这能解决你的问题。

0
如果您的代码库里有多个提交,而已经关闭的提交不是最新的时,您不能使用 --amend 修改 Change-Id。因为 --amend 只能修改最新的提交信息。
在这种情况下,您需要使用 git rebase origin/master -i 命令,并且在需要修改 Change-Id 的提交处使用 reword 而不是 pick
当出现编辑提交信息的提示窗口时,只需要删除 Change-Id 行并保存即可。这将创建一个新的 Change-Id。

如果被close的commit不是最新的,--amend不能够解决。使用rebase交互模式中的reword子命令,来reword需要修复的commit。保存后弹出,需要进行重新编辑提交消息的时候,简单删除change-Id.保存,将会自动生成一个新的change-Id - linjiejun

-2

这应该可以:

git commit --amend

删除更改 ID,然后提交审核。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接