Git / gerrit,推远程拒绝没有做出任何改动

时间:2012-12-21 14:49:11

标签: git gerrit

对提交进行更改,执行提交修改。推动我得到错误:

! [remote rejected] master -> refs/for/master (no changes made)

检查提交消息中的更改ID,它仍然是有效的提交。

我已经尝试更改文件,检查它是否显示为更改,然后添加到暂存区域并完成另一个提交修改。再次尝试推送并获得相同的问题。不知道这个。

编辑:这是推动gerrit,而不是直接git。

我正在跑步:

git push origin master:refs/for/master

获取原产地详细信息的结果是(公司详细信息已删除):

$ git remote show origin
* remote origin
  Fetch URL: ssh://lytee@gerrit.mycompany.net:29418/myrepo
  Push  URL: ssh://lytee@gerrit.mycompany.net:29418/myrepo
  HEAD branch: master
  Remote branch:
    master tracked
  Local branch configured for 'git pull':
    master rebases onto remote master
  Local ref configured for 'git push':
    master pushes to master (up to date)

9 个答案:

答案 0 :(得分:49)

此问题是由于我之前执行的操作。我试图push一个新的变化,除了一个仍在审查的变化之外,谁的父母也在接受审查。

 Trunk ------ Parent A ----- Parent B ----- New change
(merged)     (unmerged)     (unmerged)

我曾使用cherry-pick在本地获取这两个更改(Parent A和Parent B),然后使用第三个cherry-pick在尝试push之前从本地分支获取更改。这就是造成这个问题的原因,因为我个人的改变主要是试图重写历史。

正确的过程是在主干时只有pull父B。这会自动提取trunk和它之间的任何提交(在这种情况下只是Parent A)。然后cherry-pick我的新更改以及push将正常工作。

答案 1 :(得分:4)

请参阅此问题的官方文档:

https://gerrit-review.googlesource.com/Documentation/error-no-new-changes.html

我有同样的问题,我的问题是我推动了更改,然后放弃了合并,然后我做了一些调整,错误地修改了我的提交并再次推送。这就是我收到错误的地方。

我的修复:

  1. 如果您只是想快速解决此问题,请执行git commit --amend,删除现有的change-Id,假设您已设置git挂钩,则可以完成提交并使用新{{1}应该分配给你。
  2. 进入gerrit并搜索您现有的change-Id,弄清楚发生了什么,然后进行相应的修复。 (推荐)

答案 2 :(得分:2)

如果您正在尝试更新一组评论,每个评论都有自己想要维护的更改ID(例如,在您交换两个提交顺序的rebase之后),您可能会被拒绝堆中的提交保持不变。您应该通过重写提交或类似的东西来强制生成新的哈希。

答案 3 :(得分:1)

听起来你正在做的一切正确,只要你确认你已经做了Gerrit应该接受的改变。

git push origin master:refs/for/master

也许这就是问题所在?如果您的更改不在您的本地版本的主分支上,那么您不会推动您的更改。而是尝试:

git push origin HEAD:refs/for/master

HEAD是一个快捷方式,代表您当前在git中的提交。

答案 4 :(得分:1)

我有同样的问题。刚刚更改了提交消息并推送了代码。成功了。

答案 5 :(得分:0)

我有同样的问题。 与此同时,还有另一个提交没有合并到主人,并在gerrit审查和gerrit重新定位。 即推送审查的代码。在gerrit重新定位并审查待完成。 一旦代码被审查,我就可以毫无错误地推送。

答案 6 :(得分:0)

我有相同的错误消息,但我尝试推送的更改是在原始更改集的不同提交之上(使用git cherry-pick做了一些魔术技巧,而且似乎gerrit不喜欢它)。我放弃了原来的更改,然后在我意识到我可以解决问题时重新打开它,但未能通过git review发送给gerrit。

此时,我的快速解决方案是放弃gerrit网站的原始更改,并通过change-Id: sha1从提交邮件中删除git commit --amend最后一行来创建新的更改。

答案 7 :(得分:0)

如果推送的提交与此更改的当前补丁集相同,则Gerrit会拒绝将提交推送为更改的新补丁集。

如果

,则推送提交被认为与当前补丁集相同
  • 提交中的文件,
  • 提交消息,
  • 提交的作者和
  • 提交的父母

都是完全相同的。

答案 8 :(得分:-1)

我的简单解决方案是更新项目,然后提交并推送。

此帮助是因为主服务器和您的本地分支不一致。 可能是当您可能基于Gerrit ...