![]() |
1
52
我认为你对这个命令的总体看法是正确的。如果远程分支与本地计算机上的远程分支具有相同的值,则将覆盖远程分支。如果它没有相同的值-它表示在您处理代码时其他人对远程分支所做的更改,因此不会覆盖任何代码。显然,如果在远程中有其他提交,那么值将不相同。
我只是想到
我相信你看过这些文档,但这里可能包含了一些更为冗长的解释: |
![]() |
2
18
git推力 是破坏性的,因为它无条件地用本地拥有的内容覆盖远程存储库。吉特 推力 强烈建议这样做,因为它可以销毁已推送到共享存储库的其他提交。力推的一个最常见的原因是当我们被迫改变分支的位置时。 例如。我们有一个项目有一个特性分支,Alice和Bob都将致力于此。他们都克隆了这个存储库并开始工作。 Alice最初完成了她的部分功能,并将其推送到主存储库。这一切都很好。鲍勃也完成了他的工作,但在把它推高之前,他注意到一些更改已经合并到master中。为了保持一棵干净的树,他在主枝上做了一个回扣。当然,当他去推动这个再平衡的分支,它将被拒绝。然而,他并没有意识到爱丽丝已经推动了她的工作,而是执行了一种推动力。不幸的是,这将删除Alice在中央存储库中的所有更改记录。 什么 --租赁强制 does拒绝更新分支,除非它是我们期望的状态;即没有人更新上游分支。实际上,这是通过检查上游ref是否符合我们的期望来实现的,因为ref是散列,并且隐式地将父链编码为它们的值。 Here 是一篇关于git push——force和git push——force with lease的好文章。 |
![]() |
3
16
中提到的“比较和交换” torek 在里面 the comments 在 his other answer 更进一步的例子是 sources of Git itself .
这个功能是在 this commit (2013年12月,Git v1.8.5-rc0)
因此,“租赁”是指:
消息人士仍然提到“cas”:
所以:“
正如我在“中提到的”
|
![]() |
4
5
假设服务器上的任何预接收挂钩都接受推送,则始终会成功:
然而,这在继续之前运行特定的客户端检查:
您可以手动运行特定的检查。以下是“租约检查”算法:
例如,如果您在分支“foo”上,请注意与“refs/remotes/origin/foo”相关联的提交id。
这里有一个悲伤的暗示:因为
克服内在的弱点
|
![]() |
5
2
租借的武力不一定安全。就像西尔维说的那样。注意:在git中,分支只是提交的指针。提交指向零个或多个父提交。即使你完全用一个硬git重置和一个强制的push或者一个不需要的force-with-lease来改变分支,这也不一定是个大问题。您可以使用本地git reflog查看分支上的本地提示(当时的头部在哪里?)已更改并重新设置并再次推动分支。然后,您只会丢失远程分支上的新提交,但即使它们也可能由团队成员还原。 |
![]() |
usergs · 推送到github时忽略某些文件 7 年前 |
![]() |
codingbbq · Git push,分支名称应该是什么? 7 年前 |
![]() |
Julien M · 使用git日志创建推送列表 7 年前 |
![]() |
Bludzee · 为什么Git毫无怨言地签出这个被删除的分支? 7 年前 |
![]() |
Ved · Git-排除特定提交和推送 9 年前 |