首先,这是我第一次写技术报告,如有写不好的地方请大神见谅,并指出问题。
现在,开始还原事故现场,我和我同事开始负责一个项目的后台管理,他一个后台,我一个后台,我们都是用php的框架laravel写的,我同事写完代码后把代码上传至码云远程仓库之后,我相继上传至同一个服务器,但问题来了,上传竟然失败,报了一个错: 404 Not Found fatal ,于是我开始上网查资料,发现可能是密钥出了问题,我急忙将密钥删除更换了一个,发现还是不行。
前方高能预警,前方高能预警,前方高能预警,重要的事说三遍
后来我想把commit的记录删掉,于是就用了git reset --hard XXX
和git revert
,过了几分钟,突然发现代码全不见了,我心想,完了我之前写的都白费了(删完库,该跑路了),我赶忙查找资料,生怕代码找不回来了,在紧张的气氛下,我开始查找这两个命令的含义。
git revert
是撤销前一次提交,此次操作之前和之后的commit都会保留,并且把这次撤销作为一次最新的提交
git reset --hard
彻底回退到某个版本,本地的源码也会变为上一个版本的内容,新修改的代码也会丢失,换言之如果之前一次都没有提交版本的话就会回到最初的样子
看来,我是被reset --hard
害惨了,好在我找到了解决办法,就是用git checkout --file
,这个命令的意思就是说如果工作区的代码改乱了,想丢弃这些修改,可以用这个命令,也就是说我的现况和这个描述几乎一致,抱着试试的心情,用了这个命令,奇迹发生了,代码都回来了。
后来我着手于为什么我上传会出错,回过头来检查,发现是我远程仓库的地址写错了,我擦。。。。,竟然是这种问题害我出现了差点要跑路的近况,我也太粗心了,于是我七搞八搞,终于能上传了。
中间还遇到了git pull
失败,原因很简单,就是代码太久没上传,导致两个人写的代码冲突了,于是,我又飞快的上网查资料,发现用了这两个命令就行,它们分别是
git fetch -all
git reset --hard origin/master
用完之后,就可以拉取了,好神奇,为了弄懂这两条命令我又去查了资料。
git fetch -all
只是下载远程的库的内容,不做任何的合并
git reset --hard origin/master
指向刚刚下载的最新版本
结果发现还有一些同名文件做的修改没有了,原来这个命令只是把远程仓库的代码拉下来,并没有合并,还好我都有在自己的文件外在新建一个文件用来放自己的文件,才导致自己的代码没有被覆盖,只要再把一些有修改过的公共文件在改下就大功告成了。
这些就是我把项目上传到码云上出现的所有问题,总结下,第一点:我上传到码云的次数太少,要经常上传才不会导致代码冲突,第二点:如果我有经常备份文件的话,代码丢失也不怕了。一句话来说我习惯还是不太好啊。