为什么`git push --force-with-lease` 失败并显示“rejected ... stale info”,即使我的本地仓库是最新的远程仓库?

Lau*_*ves 24 git git-push

我正在尝试将功能分支的变基强制推送到远程存储库。为了更安全一点,我试图--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'
Run Code Online (Sandbox Code Playgroud)

我尝试 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'
Run Code Online (Sandbox Code Playgroud)

我尝试稍微简化 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'
Run Code Online (Sandbox Code Playgroud)

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

$ 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'
Run Code Online (Sandbox Code Playgroud)

如您所见,它每次都以相同的方式失败。

为什么我的推送失败,我该如何解决?

Boh*_*nik 71

就我而言,先简单地git fetch再推一下就解决了问题。

  • 请注意`git fetch; git push --force-with-lease` 实际上与 `git push --force` 相同。默认情况下,使用“--force-with-lease”获得的“租约”是基于确认将要更新的远程引用与您上次获取的相同,因此在之前立即获取只能“保护”其他人推动那一瞬间。 (3认同)

Lau*_*ves 22

在这种情况下,结果证明问题是远程分支已被删除,但我的本地存储库中仍有它的副本。默认情况下,Fetch 不会删除本地副本,这就是它不起作用的原因。

--prune选项添加到我的初始git pull(在做我的变基之前)可以纠正这个问题。


Pie*_*000 11

如果您刚刚完成变基并且不想重新开始,请运行git remote prune origin。如果你再运行git push --force-with-lease一次,它就会起作用。