49

i am having problems pushing my changes from my local master to remote master because of this error:

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'

any idea how i can fix this issue?

git status says my branch is ahead of origin/master by 5 commits.

4

18 回答 18

49

我得到了同样的信息。这是因为我设法为两次提交获得了相同的 Change-Id。也许是由于我当地分支机构之间的一些樱桃采摘或类似的事情。通过从提交消息中删除 Change-Id 来解决,然后由提交挂钩添加一个新的 Id。

于 2014-04-02T12:40:17.043 回答
32

您的 Commit Change ID 已过期,即 Review 14823 已关闭。你不能推动相同。

这样做可以解决问题:

  1. git commit --amend
  2. 删除更改 ID
  3. 保存并退出
  4. 新的更改 ID 将添加到提交中。可以通过 git log 来验证。
  5. 再推
于 2016-08-09T09:41:09.403 回答
6

我发现以下页面详细说明了为什么由于更改 XXXXX 关闭错误而无法将更改推送到原点:https ://git.eclipse.org/r/Documentation/error-change-closed.html

干杯!

于 2012-08-15T15:39:35.390 回答
6

你有 5 个提交。

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

一种解决方法是将所有 5 个提交合并为一个,
并在此过程中
删除文件“提交消息”中的“更改 ID”。

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

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

于 2016-05-03T08:23:40.563 回答
4

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

git fetch; git rebase origin/a_branch --interactive

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

git rebase --continue
git push origin HEAD:refs/for/refs/heads/a_branch

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

然后执行以下操作:

git fetch; git rebase origin/a_branch --interactive

挑选(pick)每个提交,除了那些与更改 ### 相关的提交,应该删除(drop)。您不应该有任何冲突并立即成功地获得 rebase(冲突已经在之前的 rebase 中解决)。然后:

git push origin HEAD:refs/for/refs/heads/a_branch
于 2018-11-25T17:28:46.703 回答
1

change 14823 closed消息并非来自香草git。它表明维护该存储库的任何人都有一个更新或更新后挂钩,该挂钩正在评估您的推送并由于本地策略而拒绝它(我猜您正在向已标记为已标记为已完成/已关闭的问题添加额外提交)。您需要了解这些政策是什么,以及是否需要以某种方式重新打开更改以便向其添加提交,或者是否需要创建新的更改请求并(可能)重新调整您的工作它。

于 2012-08-15T16:11:03.133 回答
1

在我的情况下,我有 2 个提交,第一个提交是我的,但第二个不是,所以我这样修复它:

  1. 找出在更改 14823中提交了哪些文件
  2. 找到你最旧的提交并对其父项进行软重置。请注意,如果您进行硬重置,您可能会丢失所有提交。
  3. 尝试再次提交您的更改,但这次没有更改 14823中的文件

我希望它会有所帮助。

于 2013-08-26T17:42:22.247 回答
1

git status 说我的分支领先于 origin/master 5 次提交。

我所做的只是获取最新的代码。做一些调整并推动它。

那 5 个提交是什么?它们都是你的吗?

更改 14823 是否对应于这 5 个提交之一?它在 Gerrit 的地位如何?

于 2012-08-28T09:47:08.343 回答
0

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

于 2014-10-10T12:51:20.900 回答
0

您正在推送 gerrit,这是一个代码审查工具,如 url (ssh://xxxxx@gerrit.dev.xxxxx.net:29418/xxxxxx) 和“HEAD -> refs/for/master”所示“ 信息。您需要咨询维护您尝试推送到的存储库的人员,以找出更改被拒绝的原因。

于 2012-08-15T18:15:09.477 回答
0

我也遇到了这个问题,当我推送我的提交并且终端说:

![远程拒绝] HEAD -> refs/for/android_ui.lnx.1.2.c1-dev(更改 1692698 已关闭)

我去review站点查看对应1692698的更改,提交消息是:“第一次启用WiFi hostpot时提示USB tethering help”

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

  • b49c0f91744cb6f863616976c4fb4157c7af4b8c 连接 Wi-Fi 启用 USB 共享时提示不正确。
  • eb47ef919064aff516ced4bbd9d8ade0ed34b107 首次启用 WiFi 主机时提示 USB 网络共享帮助
  • 753668be1207baa514be1bbd985f3db2d6317608 修复热点通知错误。

push 失败的原因是当前的 changID 和 eb47ef919064aff516ced4bbd9d8ade0ed34b107 commit 的一样。所以我备份当前更改并硬重置为 753668be1207baa514be1bbd985f3db2d6317608 然后应用备份更改,最后依次添加、提交和推送。

希望这可以解决您的问题。

于 2016-09-01T13:19:58.087 回答
0

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

第1步:找到要删除的提交之前的提交 git log

第 2 步:签出提交 git checkout

第 3 步:使用当前的 checkout commit git checkout -b 创建一个新分支

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

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

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

于 2018-10-18T05:44:57.050 回答
0

如果 gerrit 上已经存在已合并甚至放弃的更改,则可能会发生这种情况。如果放弃了,这是我的情况,请在 gerrit 上恢复该更改并将新更改应用到恢复的更改之上。

https://gerrit-review.googlesource.com/Documentation/error-change-closed.html

于 2016-09-27T21:48:58.343 回答
0

EGit 用户解决方案:

  1. 点击修改按钮 在此处输入图像描述


  1. 使用退格按钮从提交消息区域删除 Change-Id(这将与此屏幕截图不同)
  2. 单击“添加更改 ID”按钮在此处输入图像描述

  3. 提交您的更改并推送。

于 2017-05-31T11:21:45.220 回答
0

如果你有多个提交。并且关闭的提交不是最新的。在这种情况下,你不能使用--amend修改change-Id。因为--amend只能修改最新的提交消息。

在这种情况下,使用git rebase origin/master -i并使用reword而不是pick在您需要修改change-Id的提交上。

当弹出请求编辑提交消息的编辑器时。只需删除更改 ID 行并保存。这将创建一个新的更改 ID。

于 2021-12-08T09:04:30.703 回答
0

你有 5 个提交。

每个提交都有一个“提交消息”,其中可能包含一个“更改 ID:”字符串,该字符串标识该提交属于 Gerrit 的哪个更改请求(请参阅https://git.eclipse.org/r/Documentation/user-changeid. html )

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

您需要在推送之前修改一个(或多个)提交的提交消息(请参阅http://schacon.github.io/history.html),删除它们以创建新的更改请求,或修改它们以便他们为每个提交确定正确的 Gerrit 变更请求。

于 2016-12-14T20:38:01.043 回答
0

我和我的前辈工作了 1 个多小时才得到解决方案,所以我在下面尝试了,它对我有用

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

每件事都应该很好,做得很好

于 2016-02-11T07:34:45.307 回答
-2

这应该这样做:

git commit --amend

删除更改 ID,然后推送审核。

于 2015-12-02T11:22:19.780 回答