我正试图强制将功能分支的基础推送到远程存储库。为了更安全,我尝试使用--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'
正如你所见,它每次都以同样的方式失败。
为什么我的推送失败了,我该如何解决?
4条答案
按热度按时间eyh26e7m1#
在这种情况下,问题是远程分支已被删除,但在我的本地存储库中仍然有它的副本。默认情况下,Fetch不会删除本地副本,这就是为什么它没有效果。
将
--prune
选项添加到我的初始git pull
(在重新设置基础之前)可以纠正这个问题。m3eecexj2#
在我的例子中,一个简单的
git fetch
加上一个push再次解决了这个问题。7gyucuyw3#
如果您刚刚完成了重设基础,不想重新开始,请运行
git remote prune origin
。如果然后再次运行m1n 1o1p,它将起作用。z31licg04#
当您使用
gh pr checkout <num>
checkout 到pr并在进行一些更改后尝试强制推送时,您可能会面临此问题。向其他人推送pr的正确方法是向他们的repo添加一个远程,并将其 checkout 到用于创建pr的分支。然后,您可以推送提交。它将出现在pr中。