git自linux之父发明以来,一直是很多互联网企业组织团队协作写代码的利器,所以,只要入职公司,无一不要求学会git。
做为刚毕业的小松,已经脱离了毕业生身份,虽然做过一些项目,但是git用得很少,马上入职了,对于git心里没底,碰巧看到一位知乎老哥推荐,点进去一看,立马打开了新世界的大门!学得那叫一个酣畅淋漓,一起来学学吧。
进入这个网站,会看到以下目录
可以看到这是一个闯关模式,分为基础,高级,移动提交记录和杂项四个部分,我自己感觉学完基础和高级的一部分就已经能够解决工作中大部分需求了。
基础篇
git commit
这个操作时提交新的版本,如图。
git commit 前
执行
git commit
不仅仅为了过关,这里从图中很清晰的看出,原来是c0,c1两个提交,然后git commit之后就会多一个提交。
这个master什么意思呢?就是所处分支的名字,无论你用git commit提交了多少次,c0,c1,c2,c3……都属于一个名叫master的分支,而master旁边的星号表示的是当前处于的分支。这样可以实现不同分支的跳转,也可以实现同一个分支不同提交记录的转换。
如果我们想回到c1,但是又不想撤销c2的话,我们就可以通过命令让master指向c1,如果我们有其他分支,我们就可以让星号移动到其他分支。
上面这一段很重要,是理解下面内容的基础
也就是说,git的本质就是一棵提交的树,可以反复提交不断修改,但是之前的提交记录是可以找到的,每次是谁提交,内容是什么,时间都可以看到!
git branch
执行
git branch newImage
执行完 git branch newImage后,显然,将会出现一个新的分支,你猜猜这个新分支出现在哪里呢?
是不是觉得有点奇怪?分支其实并不是真正的提交,仅仅只是一个名字,真正的提交记录是c0,c1!而无论是master还是newImage都是为这个分支命名而已,这里仅仅是新建了分支,并没有其他操作,所以他默认指向原来的提交记录。
现在,我们不仅要有新分支,而且新分支指向不同的提交记录,怎么办?当然是用git commit啦。
执行
git commit
这里为啥master前进了?
这是必须的,因为*星号表示当前分支,我们虽然新建了分支,但是当前分支,也就是最下端我们能看到的还是master,所以newImage被放到了上面,所以,要想以后在newImage上提交东西,必须先进行切换。
git checkout <name>
这里我们先不输入 git commit,而是在这之前使用git checkout。
执行
git checkout newImage git commit
可以看到,先切换到newImage后,星号落在了newImage上,然后再git commit,就可以完成新分支指向新提交记录的创建,不会影响老分支和老提交记录。
那如何让两个分支没有关系,独立发展呢?很简单,只需要切回到master分支,然后再提交一次即可。
执行
git checkout master
可以看到 *号移动到master那里了。
然后再次执行
git commit
发现两个分支真正的完成了分离。
是不是觉得很nice,以后想要切换就可以用git checkout来回移动,左右横跳啦!
git merge <name>
分支建立多了,自然需要合并,这里的merge就是这个功能,两个分支,合并后的名字属于谁呢?一猜就知道,当前分支是哪个,合并后的分支就是哪个名字,也可以说在当前分支master上执行 git merge bugFix,就是将bugFix归到master中,更好理解。
执行
git merge bugFix
为了表示方便,将bugFix的颜色转换一下,左边的命令还没有执行。
现在我们有两个分支master和bugFix,我们希望两个分支都拥有所有的修改的记录,所以我们还要再执行一次git merge master,但是由于当前分支在master,我们还要先切换到bugFix中。
执行
git checkout bugFix git merge master
这样两次合并,就使得两个分支都拥有全部的提交记录了,我们新建的两个分支,最终又合为一体。
小结
上面的东西虽然少,但是足够完成很多工作,授人以鱼不如授人以渔,网站如下:
learngitbranching
我曾在几个月前试图学习git,但是无论是博文还是视频往往都有讲述不清楚或者引起歧义的地方,只有真正的可视化才能让人弄懂,致敬作者!
一起加油学习git吧,少年。