标签搜索

目 录CONTENT

文章目录

记录一次Gerrit提交报[remote rejected]**(change closed)问题

沙漠渔
2022-07-27 18:51:54 / 0 评论 / 0 点赞 / 1,424 阅读 / 1,184 字 / 正在检测是否收录...
温馨提示:
本文最后更新于 2022-07-27,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

今天有位同事过来问我说提交git的时候报远端拒绝,是不是我没给开足权限,这可真不怪我啊,我都该给的权限都给了的,于是查查原因吧,发现了一丢丢异常,然后就是这个问题导致的,当然,这里还把另外一个我想到的,但是不是这次的原因的也说明一下。

问题表象

! [remote rejected] master -> refs/for/master (change http://**** closed)
error: failed to push some refs to 'ssh://******'

就是报上面类似的错误了。

可能原因一

查看提示报某次提交已经close的了,远端拒绝,首先想到的就是,是不是changeId和服务端冲突了,原changeId的提交已经closed了?
于是:
git commit --amend查看changeId是不是有问题,发现没问题,与远端的提交记录并不冲突,然后可以排除这个问题了。

当然这里把这种情况描述一下,可能产生的场景如下:

  1. 修改代码,push到远端
  2. 合并此次提交,将该次提交close
  3. 使用小乌龟选择修改上次提交,或者手动通过git commit --amend修改changeId 尝试提交
    即报上述问题。
    出现问题原因,前面已经说了,changeId被占用并且已经closed了,如果没有closed,相当于修改上次提交。

该情况下,解决办法如下:
git commit --amend 的时候删除changeId 。退出后会自动生成一个新的changeId,再push就没问题。

可能原因二

尝试了前面的可能原因,发现不是这个问题,那就还得找找其他问题啊,查看这个人的提交记录,发现:上一次push之后,其在网页端修改过commit信息,本地git log和远端对应不起来,这就有点蹊跷了啊,对应不起来,现在推送是不是可以理解为本地的上次提交与远端不一致,做过修改了,所以此次push相当于push上次提交commit信息的修改以及此次代码的修改?

于是让其尝试将本地仓库回退到上次提交的节点,git stash之后然后pull最新代码,将git log内容与远端保持一致,再git stash pop出来最近的代码修改记录,重新push,果然提交成功了。

这种情况描述上面也基本说明白了,就是本地和远端相同的changeId对应的提交信息不一致了,相当于远端做了一次修改提交,然后本地push的时候相同changeId对应的修改不一致导致的问题。

Tips:为了避免类似问题,推荐不要在远端修改内容,并且完全保证changeId不要乱修改,合并了代码之后就不要使用小乌龟的增订提交了,切记切记。

0
广告 广告

评论区