Git Force vs Force with Lease
以及何时使用它们
8月12日- 2分钟阅读
当你想执行一个git push ,而远程 repo 拒绝它的时候,有一个危险的方法可以让它发挥作用。
git push --force
这种危险的方法非常流行,大多数IDE都有一个专门的复选框。但是,force 有一个兄弟姐妹,没有得到足够的重视。
git push --force-with-lease
集成开发环境通常没有为force-with-lease 的复选框,文件中通常没有提到它,它也没有得到自己的科幻电影。


引入力与租借
当用force 推送时,git会直接忽略历史,并将其覆盖。当用什么都不推送时,git希望你已经追加了历史记录。但大多数时候,你在历史中做了一个小小的改动。
- 你重新排列了提交的顺序。
- 你改变了提交信息。
- 你把这些提交压成了一个。
在这些情况下,你只是做了一些 "家务事",并没有破坏提交的贡献。在这种情况下,force-with-lease 就会派上用场。基本上,force-with-lease 所检查的是你没有破坏实际工作。所以,如果你没有破坏它,就不要force 。
不要强行推送,除非你想破坏一些东西。
什么时候用租借的方式使用武力
假设普通的推送不起作用,如果人们在做体面的日常工作,就不需要使用force 。每一个日常的需求都可以用force-with-lease 来满足。这些包括任何形式的重放,特别是。
- 把一个分支重新放到另一个分支上。
- 重写过去的一个提交。
- 把几个提交的内容压在一起
- 重新安排提交的顺序,或者
- 改变先前提交的作者。
何时使用武力
当做一些讨厌的事情时。这包括
- 将一个提交及其贡献从历史中删除。
- 从历史记录中删除一个不小心提交的大文件。
- 从 repo 中删除一个文件夹及其所有历史记录。
最后要说的是
在我使用git的6年中,我只做过一次force 。如果你经常这样做,那就有问题了。另外,我从来没有强行推送到master(除了那一次)。
要做force-with-lease 和其他git技巧的快捷方式,请看我的另一篇文章《16个Git技巧和窍门》。
