摘自微信公众号:https://mp.weixin.qq.com/s?__biz=MzU1NTg0MzMwMg==&mid=2247483711&idx=1&sn=b75e80c4d4483092cee832b22b516b65&chksm=fbcf6ab6ccb8e3a034079078bd9e68a960d9640a6a1b0dff2148f7857e18cbb22f71b2faf4ce&scene=27&ascene=0&devicetype=android-26&version=2700033a&nettype=3gnet&abtest_cookie=BAABAAoACwASABMABAAjlx4AV5keAM6ZHgDZmR4AAAA%3D&lang=zh_CN&pass_ticket=9lOSHFEPi%2FBfnwQrxYqpqLtiULQjuTaK8IThDnW8CiLuaev%2F8mlbsLQoAcYyi4QD&wx_header=1
上篇文章说了最基本的git使用,这里讲一些常用的git 操作,git既然是版本控制器,那什么是版本呢?
上一篇已经在github上创建了一个仓库了,这个时候我们模拟去公司的时候,怎么拉项目
首先,我们把桌面的那个demo文件夹删掉,因为待会拉下来的项目会重复。
在桌面右键,打开git bash。
git clone https://github.com/****/demo.git
从远程仓库复制一个仓库到本地,你会看见桌面上有个demo文件夹,进去会发现就是github上的仓库,还有.git隐藏文件夹,也就是说clone下来的仓库就已经变成本地仓库了。
然后这个时候当前还没进入仓库文件夹,只是还在桌面上
cd demo
就进入仓库了,上面会多个(master)的分支显示,当前在master分支上
这是就相当于把项目已经down下来了,我们就可以工作,写代码了
我们先修改一下,在test1.txt中修改
git status
查看修改情况,
git diff
查看修改的内容,精确到行
git add .
git commit -m '修改test1.txt'
提交这次修改
git log
查看这个master分支上的提交的日志,每一次的commit都是一条提交,都是一个版本
git reflog
查看你的所有提交记录,比如你的commit ,merge,checkout都能看见
git diff <远一点commitId> <近一点commitId>
查看2个提交之间的不同,修改了什么代码,都能看见
分支
我们在工作中的项目一般是多个人一起开发的,那么你写代码的时候就不能直接在主分支(master)上修改,因为你修改的不一定是对的,别人就不能开发了,所以一般是自己切一个分支来开发,切出来的分支是主分支的副本,代码一模一样。然后你开发完,在合并到主分支,这样就不会影响别人了,别人也不会影响你
git branch demobranch
创建一个叫demobranch的分支
git checkout demobranch
第一次checkout会把master的代码复制到新创建的demobranch,以后再checkout就是切换分支了,并不会复制代码。
(这那个指令可以合并成一个简写git checkout -b demobranch)
这样我们就从主分支切换到demobranch分支了,可以在这个分支上任意开发,然后再合并到主分支。我们现在在demobranch上修改,做了一个注释为add的提交。
这个时候我们要把这个提交合并到master上
git checkout master
切换到master
git merge demobranch
合并demobranch分支上的新提交
master上就有这个提交了
提交失败
你不是每次提交都会成功,有可能会失败,如果你和别人都是在同一个分支上写代码的话,别人先提交,你就提交不了,因为你的分支上就不是最新的代码了,所以你必须git pull 把远程的提交拉取下来,同步到本地,保证提交最新,就可以提交了
冲突
在pull的过程中有可能会冲突,冲突的意思就是,别人修改了某个文件,你也修改了这个文件,git不知道要 保留那个代码最正确的,所以需要我们自己人工干预去处理,处理好了才能继续提交,这样pull才算完成。
git pull = git fetch + git merge
就是从远程拉取,然后再merge,就是在merge的时候出现冲突的,所以我们merge的时候也会出现冲突,我们来演示merge的时候冲突。
我们再切换一个分支demobranch22作为别人在写代码,然后合并到master上,
这个时候,我们到demobranch这个分支上修改,然后再merge,就会出现冲突
这里显示test1.txt出现冲突,因为别人和我都修改了,test1.txt这个文件,别人提交了,而我没有同步他的代码(一般我在写之前会git pull同步一下代码),所以现在没办法同步了,同步还是会冲突,这个时候我们可以放弃合并,git merge --abort就别放弃了
所以,这时候如果不放弃合并,就要解决冲突,我们一般会问别人他的那段代码怎么处理,一般2个都保留,我们先看看test1这个文件
我的处理之后
这个时候,文件出现了修改,我们再次提交一下就好了
为了更好的避免冲突,每次修改之前,都同步一下代码,git pull
好,今天的中级教程就讲到这里,明天讲高级教程
摘自微信公众号