补丁没有被推到格里特

Ans*_*hul 5 git gerrit

当我们尝试推送补丁时,我们收到以下错误:

错误:未能将某些引用推送到'ssh://git_bare_repo@10.20.88.250/home/ferrari_users/git_bare_repo/android_m/hlos/platform/frameworks/base'

提示:更新被拒绝,因为推送的分支提示在其后面

远程提示:对应.看看这个分支并整合

远程更改提示:(例如'git pull ...')再次推送之前.暗示:

有关详细信息,请参阅"git push --help"中的"关于快进的注意事项".

当我调试时,我发现了一个gerrit提交的引用,它实际上是通过gerrit放弃但没有在Git中得到反映.

我们仍然可以在platform/frameworks/base.git/info/refs中看到一个引用

eec90465656f3426cd5a45e5333cec90f07982c1 refs/changes/68/1968/1

所以第一个问题是,如果我们放弃任何补丁,该条目仍然存在于refs文件夹中,是否有任何文件列出了被废弃的补丁?

我认为这就是为什么特定项目无法同步并且我们无法推动新变化的原因.

Git pull和git checkout,指向已通过Gerrit成功合并的最后一个提交补丁.

我尝试使用git push -f origin强制推送HEAD:refs/for/8939_ferrari_main它显示补丁推送成功并且可以在frameworks/base.git/info/refs中看到它的条目

cdd319b12cc422541b101e25470317ca28ddf6bc
refs/for/8939_ferrari_main

但它没有被列入gerrit.有没有办法从git裸仓库中删除这个补丁,因为它没有在Gerrit中列出.

如果可以共享任何指针来解决问题,我们将不胜感激.


编辑

有没有办法将git bare repo重置为任何特定的标签?

Ezw*_*wig 0

要将裸存储库重置为某个 TAG ,您需要具有force pushrefs/heads/BRANCH 的访问权限。

警告这会让你失去标签后完成的提交!

git clone <REPO>
git checkout master
git reset --hard <TAG>
git push --force origin HEAD:refs/heads/master
Run Code Online (Sandbox Code Playgroud)