2012-12-21 50 views
30

对提交进行了更改,执行commit commit。做一个推,我得到的错误: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://[email protected]:29418/myrepo 
    Push URL: ssh://[email protected]: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) 
+0

你正在运行什么push命令,以及你在本地有哪些分支? – Amber

+0

我在本地做主,并且正在运行'git push origin master:refs/for/master',并且使用有效的提取和推送URL来设置原点。 – edwardmlyte

+0

鉴于您使用'refs/for/...'而不是'refs/heads/...'语法,您使用的是Gerrit吗?如果是这样,那么这与你的问题高度相关,应该提及。 – Amber

回答

45

此问题是由于我之前执行的操作。我正在尝试push一个新的变化,除了需要审查的变化之外,谁的父母也在等待审核。

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

我用了cherry-pick本地(父和母B)获得这两个变化,然后是第三cherry-pick试图push之前得到来自当地分公司的零钱。这就是导致这个问题的原因,因为我个人的变化本质上是试图重写历史。

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

+8

今天我们遇到了一个问题。问题是我们在格雷里: Change1(合并) - Change2(未合并) - Change3(未合并) 我们想要应用发布一个新的补丁集到Change3,但它被拒绝。消息:''! (远程拒绝)master - > refs/for/master(不做任何修改)''在我们头脑发现后,我们发现我们已经在本地进行了rebased,并且Change2也收到了新的提交哈希,但没有发生新的变化。我们通过在本地重新设置交互来解决它,并通过在提交消息的末尾添加一个字符来重写Change2。之后,发布很好。 – mortb

2

这听起来像你正在做的一切是正确的就像验证你已经改变了Gerrit应该选择的那样。

git push origin master:refs/for/master

也许这是什么问题?如果您的更改不在主分支的本地版本上,则不会推送您的更改。相反,尝试:

git push origin HEAD:refs/for/master

HEAD是表示当前在Git中提交的快捷方式。

+0

与该快捷方式相同的错误。 HEAD是指当前分支中的当前更改,还是仅指当前分支中的当前更改? – edwardmlyte

+1

HEAD表示您当前的更改周期。你所在的分支无关紧要。如果用HEAD推动不起作用,我怀疑你的修改没有改变提交。尝试在修改时更新/更改提交消息,然后再次按下。 – Brad

+0

感谢您的帮助布拉德,发现我一直在错误地使用git。 – edwardmlyte

2

如果您尝试更新一组评论,每个评论都带有您想要维护的自己的change-id(例如,在您交换两次提交的顺序之后进行rebase)之后,如果某些评论堆栈中的承诺保持不变。您应该强制通过重新提交提交或类似的东西来生成新的哈希。

+6

我不得不做一个“git commit --amend”而没有改变,这似乎解决了我的问题。 – Stuart

0

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

0

我有同样的错误消息,但我试图把变化是从原​​来的更改组不同的提交顶部(做了一些魔术技巧与git cherry-pick,似乎格里特不喜欢它)。我放弃了原来的修改,然后在意识到可以解决问题时重新打开它,但未能发送给gerrit并与git review

在这一点上,我快速的解决办法是放弃从格里特网站原来的变化,并通过与git commit --amend去除提交信息的change-Id: sha1最后一行创建一个新的变化。

0

出现此错误消息如果推送的提交与此更改的当前补丁集相同,Gerrit拒绝将提交作为新补丁集推送到更改中。

推送的提交被认为是等同于如果

  • 在文件提交设置当前补丁,
  • 提交消息,
  • 的提交作者和
  • 的承诺的父母

都完全相同。

1

请参考官方文档关于这个问题在这里:

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

我有同样的问题,我的问题是,我推了变化,然后放弃了合并,然后我做了一些调整,错误地修改了我的提交并再次推送。那是我得到错误的地方。

我的解决办法:

  1. 如果你只是想解决此问题,迅速得到,也git commit --amend,删除现有change-Id,假设你已经设置了git的钩子,你可以完成提交和新change-Id应该分配给你。
  2. 进入gerrit并搜索您现有的change-Id,找出正在发生的情况并相应地进行修复。 (推荐)
相关问题