You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git:显式指定SHA的--force-with-lease为何与隐式版本行为不同?

关于git push --force-with-lease的行为差异解析

你遇到的问题核心在于--force-with-lease参数的两种写法对应的校验基准不同:

  • 当你执行git push --force-with-lease=preflight/myname origin develop:preflight/myname时,这里的preflight/myname被Git识别为本地分支名。如果本地没有这个分支,或者该分支的上游分支不是origin/preflight/myname,Git会用错误的基准SHA去和远程分支校验,自然会提示更新被拒绝。哪怕你本地的refs/remotes/origin/preflight/myname记录的SHA是正确的,只要没指定完整的远程追踪分支路径,Git不会自动关联到它。

  • 而当你显式指定SHA值--force-with-lease=preflight/myname:7528290003ef5b36f9f6446c91cb4a3ddb20c0c2时,相当于直接告诉Git:“远程的preflight/myname分支当前必须是这个SHA值才能强制推送”。这时候Git会直接拿这个SHA和远程仓库的对应分支做对比,只要匹配就允许推送,跳过了本地分支上游的关联校验,所以成功。

正确的写法应该是指定远程追踪分支的完整路径,这样Git会用本地记录的远程分支SHA做校验:

git push --force-with-lease=origin/preflight/myname origin develop:preflight/myname

这样就和你显式写SHA的行为一致了——Git会读取本地refs/remotes/origin/preflight/myname里的SHA值,去和远程分支做校验。

内容的提问来源于stack exchange,提问作者T. Baum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 18:44:59