为什么“git push--force with lease”在“rejected…stale info”时失败,即使我的本地存储库是最新的远程存储库?

ltqd579y  于 2022-10-23  发布在  Git
关注(0)|答案(4)|浏览(313)

我正试图强制将功能分支的基础推送到远程存储库。为了更安全,我尝试使用--force-with-lease来确保自上次获取分支以来,分支中没有发生其他更改。
这失败的原因我不明白:

$ git branch

* my-branch

  master

$ git push --force-with-lease origin my-branch -u
To gitlab.com:example/my-project.git
 ! [rejected]        my-branch -> my-branch (stale info)
error: failed to push some refs to 'git@gitlab.com:example/my-project.git'

我尝试了一次fetch,看看我的本地缓存是否以某种方式失去了同步:

$ git fetch

$ git push --force-with-lease origin my-branch -u
To gitlab.com:example/my-project.git
 ! [rejected]        my-branch -> my-branch (stale info)
error: failed to push some refs to 'git@gitlab.com:example/my-project.git'

我尝试简化push命令:

$ git push --force-with-lease
To gitlab.com:example/my-project.git
 ! [rejected]        my-branch -> my-branch (stale info)
error: failed to push some refs to 'git@gitlab.com:example/my-project.git'

我尝试将支票限制在我的分行:

$ git push --force-with-lease=my-branch:origin/my-branch
To gitlab.com:example/my-project.git
 ! [rejected]        my-branch -> my-branch (stale info)
error: failed to push some refs to 'git@gitlab.com:example/my-project.git'

正如你所见,它每次都以同样的方式失败。
为什么我的推送失败了,我该如何解决?

eyh26e7m

eyh26e7m1#

在这种情况下,问题是远程分支已被删除,但在我的本地存储库中仍然有它的副本。默认情况下,Fetch不会删除本地副本,这就是为什么它没有效果。
--prune选项添加到我的初始git pull(在重新设置基础之前)可以纠正这个问题。

m3eecexj

m3eecexj2#

在我的例子中,一个简单的git fetch加上一个push再次解决了这个问题。

7gyucuyw

7gyucuyw3#

如果您刚刚完成了重设基础,不想重新开始,请运行git remote prune origin。如果然后再次运行m1n 1o1p,它将起作用。

z31licg0

z31licg04#

当您使用gh pr checkout <num> checkout 到pr并在进行一些更改后尝试强制推送时,您可能会面临此问题。
向其他人推送pr的正确方法是向他们的repo添加一个远程,并将其 checkout 到用于创建pr的分支。然后,您可以推送提交。它将出现在pr中。

相关问题