同事和组长的对话引发笔者对git的思考。先介绍一下我们小作坊式的git提交流程,本地打包,删除dist文件,重建dist文件,gitadd.,gitcommit-m'XX',gitpushorigin分支名和git提交的不一样传统公司。我们的打包是本地打包,dist文件直接上传到仓库。同事把代码推上去后,浏览器访问的还是原来的js和css。同事说:组长,你要把dist删掉,重新从仓库里拉最新的组长:git提交后不是把原来的dist换掉了吗?你让我删除dist有什么意义?我还是删了再拉。没想到组长说:你的dist现在是最新的,现在可以了。同事具体说了什么作者忘记了。总的来说,他是在捍卫git提交不会取代原来的dist。删档的问题,不过他没说服组长,组长也没说服他,反正上线了就放心了。我碰巧在我旁边听到了。如果我在两年前提出问题参加辩论,我会向同事寻求帮助。但是笔者没有动,不是怕PUA,而是表达能力太差,就算是对的也说不好。根本原因是作者对这方面的知识了解不深,不敢大谈理论知识。根据理论知识,如果push整个dist文件,即使远程仓库中有dist,也不会替换整个dist文件夹。替换里面同样的数据,css和js因为hash值不同,所以一直这样下去,dist里的文件会越来越多,因为只有一个index.html文件,所以不会出现Replaced引用以前文件的问题。如果出现,清空浏览器缓存即可解决实战测试。因为生产环境和测试环境有不同的发布代码流程,首先要做的是配置环境保持一致。将nginx指向仓库地址,然后从远端拉取代码修改nginxserver中的配置{listen7000;#root/usr/share/nginx/html/distroot/home/jingqb-web/dist...}再次查看nginx配置是否为oknginx-t,然后重启nginxnginx-sreload,然后将代码提交到远程仓库,然后到服务器进入/home/jingqb-web目录,gitpulloriginXX,进入dist文件,查看我们修改打包后的js,在项目中打印一些日志来提示文件变化,这样构建后会显示不同hash的jsgitpushoriginXX。再次登录服务器,进入/home/jingqb-web目录,然后拉取代码gitpulloriginxx找到,umi.b0f5511b.js被删除,新生成的umi.f8280c0e.js在里面,dist是一个干净的源文件。为什么?build之后,先删除dist文件,生成一个干净的dist,然后我的操作是:gitadd.gitcommit-m'XX'gitpushorigin'XXbranch'我的操作中没有pull代码,而是,直接push代码,意思是dist是我本地的dist,不是合并后的。想想看。这种方式的缺点是多人开发时,拉取别人的代码后,需要merge后重新构建才能重新构建。服从是有风险的,幸好我没有成为英雄。谨言慎行是一生的学问。三句测试你懂git吗?这引发了笔者对git的新认识。结合我平时的经验,我觉得三个问题可以检验别人对git的理解程度。您和您的同事基于相同的承诺进行开发。后续合并时,如何按时间顺序显示commit记录gitrebasemasterXX(branch)得到更优雅的committree代码如何回滚gitreset--hardXX将当前代码指向另一个commit你开发代码,提交几次commit,然后用gitreset--hardxxxxx将代码指针指向原来的commit,并在这个commit上开发一个函数,提交一个commit。如何检索之前提交的几次提交?首先,使用gitreflog,它可以显示你之前所有的git操作。对比gitlog,它不仅包含了对gitlog的操作,还记录了删除的commit记录和reset操作当时的commitcherry-pick是取出来的意思,把二次开发时的commit取出来放在主分支上
