默认情况下,
git push
拒绝更新远程ref,该远程ref不是用于覆盖它的本地ref的祖先
- 即git push
如果已从分支机构分歧为push
,则不会更新遥控器。
git push --force
禁用这些检查,并可能导致远程存储库丢失提交;小心使用
- 即git push --force
将更新远程,无论它具有什么提交或本地跟踪分支是否知道这些。
git push --force-with-lease
将通过要求其当前值与我们为其提供的远程跟踪分支相同来保护将要更新的所有远程引用
- 即git push --force-with-lease
与git push --force
的工作方式相同,但如果要更新的遥控器与本地跟踪分支不匹配,或者换句话说用户没有fetch
编辑了遥控器的最新更改。
man git-push
对git版本2.17.1
的所有引用。
从上面的描述和我的解释中,git push --force-with-lease
和git fetch
如果有必要,似乎总是比git push --force
更安全(在不知不觉中覆盖远程提交的风险较小) )。
是否有任何用例,最好只使用git push --force
而不是git push --force-with-lease
(以及git fetch
根据需要)?或git push --force
是否仅存在此行为以实现向后兼容性,而git push --force-with-lease
现在是一种严格更安全,因此更可取的选择?
答案 0 :(得分:3)
简短的回答是否定的,在没有租约的情况下使用武力更好更多。在某些情况下,你可能不在乎寻找租赁的当前价值,在这种情况下,常规力量和租赁力量同样更可取。
这隐藏了如下事实:如果您知道引用的预期值,则不能使用“with lease”变体。所以在这个特定的意义上,如果你完全确定你不关心当前的值,和你不会想要去理解它,如果你确实得到它,只会继续重复比较和交换操作,那么你需要做至少两个操作(“获取当前值”,然后“强制租赁”) (“力”)。所以在这个意义上,可能会出现一些情况。然而,在实践中,人们可以用一只鼻子的手指来计算这些情况。