必威体育Betway必威体育官网
当前位置:首页 > IT技术

git push -f 谁用这个命令X谁

时间:2019-06-23 16:44:14来源:IT技术作者:seo实验室小编阅读:82次「手机版」
 

git push -f

严重声明

最近在一篇别的网页中看到一句话,大致内容是

除非只有自己一个人用,不然用 push --force 的都该去死

确实,git push -f表示将目前自己本机的代码库推送到远端,并覆盖,这回造成什么样的影响呢,我们来模拟进行一次操作

实验过程

  1. 首先进行初始化一个代码库

https://github.com/happut/test_git_f

初始化一个远端库,并clone到a/b两个目录,用来模拟两个人的提交情况。

2.a进行修改,并提交一次commit到本地库中,并推送,之后本地目录树和服务器目录树分别如下

image.png

image.png

sha-1值均为9abf12a

3.a继续修改,提交commit2

image.png

image.png

commit2 sha-1值为6d86006

4.b进行git pull,a则对历史提交进行改写git commit --amend,提交commit2'

image.png

本地库的commit2的sha1码已经变成0dfe661

此时进行push,明显推送不上去

image.png

因为远端的库和本地库历史不一致,又无法fast-forwards。

好,那我们git push -f推送

image.png

image.png

推送成功,远端库也该为0dfe661

那么这样修改后,对另外的开发者有什么影响呢

  1. b进行git pull

image.png

这什么鬼,看看历史

image.png

自动生成了一个merge commit

结论

其实在推送时,尽量避免git push -f的操作,或者说git push -f是一个需要谨慎的操作,它是将本地历史覆盖到远端仓库的行为。

刚才的测试中,b开发者在a进行git push -f前已经进行git pull操作,所以历史上的commit2是可以查找到,但是如果没有任何其他开发者进行pull,a再改变历史并强制推送,这部分数据就会丢失。

当然也并非禁止,有时,如果代码组内review后,确认代码正确无误,保证大家未pull的情况下,强制推送后,可以保持目录树清洁。

相关阅读

Spring Security 5.0.x 参考手册 【翻译自官方GIT-201

源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc版本号:5.0.x 参考

git报错: git: not authorized :未经授权解决办法

今天拉项目的时候很顺利,但是准备pull下来最新的项目的时候却一直提示 not authorized,一直说我未经授权,刚开始不知道怎么回事,后来

利用github pages做免费静态网站个人免费域名空间

如图所示点击加号新建一个项目,然后填写 xxx.github.ip 为项目名 xxx表示你的账号 别填错了,乱填也无法开通。 必须是public属性,勾

git pull命令

git pull命令作用:从另一个存储库或本地分支关联的远端分支获取最新代码,并与本地代码资源整合。git pull命令执行过程:取回远程主机

H5,API的pushState(),replaceState()和popstate()作用,用

pushState和replaceState是H5的API中新添加的两个方法。通过window.history方法来对浏览器历史记录的读写。 pushState和replac

分享到:

栏目导航

推荐阅读

热门阅读