大厂资讯

乘风破浪的程序员们必备知识:git全方位学习
北大青鸟总部

摘要:乘风破浪的程序员们必备知识:git全方位学习

工欲善其事必先利其器,对于乘风破浪的程序员后浪们来说,最基础也最重要的工具便是Git了。Git是程序员代码的托管平台,与同事一起协作办公的工具,代码变更的记录存储,所以Git知识的掌握非常重要,利用好工具也能更好的服务于工作。大家今天有福利了,因为今天我们会详细的给大家介绍Git相关知识,全方位的让你掌握Git~
本文介绍的内容包含Git初阶之Git是什么?、Git初阶之Git的理论基础、Git初阶之Git的常用基础命令、Git中阶之冲突处理、Git高阶之回退。
Git是什么?
Git是一个分布式版本控制系统,存储文件内容和文件变更记录。所谓分布式是相对于集中式而言的,集中式是有一台中心服务器,所有的文件都存储在上面,这样出现的问题是如果这个服务器宕机了或坏掉了,那么所有的文件都没了。分布式就是去中心化,每台服务器都可以存储项目内容,这样即使某一台坏掉了,其他的人还可以从别的服务器去拷贝获取内容。所谓版本控制系统就是存储代码、文档等内容,并且把每次内容的变更详情都清晰的记录下来。常用的Git工具有Github、Gitlab、Gitee等。Git的分布式文件系统概念就好像是在一个家庭里把钱全交给老婆管,每一次的进账出账全以本本记录下来,老婆如果跟着别人跑了或者自己去炒股,那么所有的钱都没了,但如果是家里每个人都管一部分,这个即使老婆这部分没了,老公那剩余的钱还可以支撑整个家庭,而每一次钱的变动(比如增加多少、花在什么地方、谁花的)全都清清楚楚记录下来。


Git的理论基础
理论基础1之基础概念。在Git中最基础的三个概念是工作区workspace、仓库repository、暂存区Index。所谓工作区就是电脑上的本地文件和目录,通过Git的版本控制,构成了工作区。所谓暂存区就是暂时存放代码的地方。所谓仓库就是存储代码的地方,包含本地仓库和远程仓库,本地仓库用于自己写新代码,写好了先提交到暂存区,经过多次提交感觉差不多了,最后在提交到远程仓库。整体的工作流程就像是储蓄,比如摆地摊的程序员小ke,他通过每天的辛苦劳动,每天的收钱罐(暂存区)都有对应的钱,辛苦忙完一天后,小ke会盘算每天的进账,把钱放到家里的存钱罐(本地仓库),摆地摊很挣钱啊(哼?还写什么代码呢,摆摊去咯),不到一月,小ke已经挣了一万有余了,存钱罐也快放不下来,再说也不太安全,因此小ke找个时间就去银行(远程仓库)把钱存起来了。以前小ke只能在家或离家比较近的地方才能使用自己的钱(因为存钱罐在家),如果存钱罐丢了就啥都没有了,而现在把钱存在银行里,走遍大江南北,都可以使用自己的钱,如果把密码告诉别人,别人也可以来使用自己的钱,而且每笔消费银行都有流水单记录清清楚楚,再也不担心钱丢了。



Git的常用命令
在日常开发中我们最常用到的命令有gitclone、gitcheckout -b dev、gitadd、gitcommit、gitlog、gitdiff 、gitstatus  、gitpull 、gitpush。一个完整的项目开发流程大概如下,加入新团队接手一个项目后,在进入开发前,先使用gitclone将远程版本库的内容克隆到本地,为了不污染master分支(保持稳定版本,发布生产环境),我们使用gitcheckout -bdev创建一个新的dev分支进行新功能的开发,新功能进入开发后,每天在本地写的代码都可以提交,这边便于快速验证和团队成员check,使用gitadd .命令边可以把所有的代码从本地文件夹提交到暂存区,使用gitcommit -m “this is a description"便可以将暂存区内容提交到本地仓库,使用gitstatus便可以查看工作区的状态(是否有变动、变动内容等),在本地仓库使用gitlog看所有的提交日志,使用gitdiff看暂存区和工作区的差别,在本地仓库差不多完事儿后,使用gitpush origin dev可以把本地的代码提交到远程仓库的dev分支了,使用gitmergemaster便可以把当前dev分支的内容合并到master分支。至此,所有有远程仓库权限的人都可以查看代码,写新的代码提交,因此每次进行新的开发之前,都需要gitpull 拉起远程所有分支更新并合并到本地分支进行开发,保障始终在最新的内容上做修改。



Git的冲突处理
在Git中多个人合作开发,对同一个仓库进行内容修改,多个开发分支并存,那么出现冲突是很正常的。对于同一个文件,不同的人拉取了不同的分支,基于这个文件去做改动和修改,最后要把修改合并到master分支,那么应该以哪个为准呢?这个时候冲突就产生了。常用的冲突解决方案也很简单,根据git的反馈找到冲突文件,查看冲突内容,决定要保留哪些、抛弃哪些,最后再重新提交就可以了。就像和朋友一起在地摊上买烤串的时候,你说要3串牛肉串、他说要5串牛肉串、我说要10串牛肉串,那么冲突就产生了,老板到底听谁的呢?解决方案就是我们三个人中的老板决定好要多少串,抛弃已存在的选择,告诉摊贩就可以了。
Git的撤销与回退处理
撤销与回退是非常正常的事情,比如我们在微信发错了消息,需要撤回啊、上线的某个版本有故障需要回退啊,再正常不过了。所以Git也提供这样的机制,支持将修改后的文件撤销回上一个版本、撤销多余的提交等。
因为git中的代码可以存储在各个区域,比如工作区、暂存区、本地仓库、远程仓库,所以每个地方git都提供了对应的代码回退策略。在工作区的代码,也就是本地目录的代码,使用gitcheckout —就可以舍弃所有修改,使用gitcheckout — 666.txt就可以只舍弃666.txt这个文件。在暂存区的代码,也就是只使用了gitadd命令进行提交,使用gitreset HEAD可以丢弃所有代码,使用gitreset HEAD666.txt就可以只舍弃666.txt这个文件。在本地仓库的代码因为已经提交到仓库里了,仓库里存储的就是代码变更记录,只能回退到某一次的修改了,使用gitlog可以获取所有的提交并找到自己想要回退的commitID,使用gitreset -hard <commitID>可以回退到你想要的某个版本,使用gitreset —hardHEAD^回退到最新的一次提交。当你的代码提交到远程仓库后,和在本地仓库一样的思路只能回退某个版本了,使用gitlog可查看所有的提交记录,使用gitreset —hard <commitID>或使用gitrevert <commitID>回退到某次提交,最后使用gitpush origin HEAD —force强制提交。



长江后浪推前浪,一浪更比一浪强,掌握了扎实的git知识后,便可以将git工具使用游刃有余,更高效的coding,来吧,乘风破浪的程序后浪们,talkis cheap ,show me the code~~  
相关阅读
热门推荐