第一章 Git概述
Git是一个免费的开源的分布式版本控制系统,可以快速高效的处理从小型到大型的各种项目。
Git易于学习,所占内存小,性能优秀,具有廉价的本地库,方便暂存区域和多个工作流分支等特性。
1.1何为版本控制
版本控制是一种记录文件内容变化,以便将来查阅特定版本修订情况的系统。
版本控制其实最重要的是可以记录文件修改历史记录,从而让用户能够查看历史版本方便版本切换。
1.2为什么需要版本控制
个人开发过渡到团队协作
1.3版本控制工具
集中式版本控制工具:CVS、SVN(Subversion)、VSS......
集中化的版本控制系统,都有一个单一的集中管理服务器,保存所有文件,而协同工作的人通过客户端连接到服务器,取出最新的文件或者提交更新。
好处:每个人都可以在一定程度上看到项目中的其他人正在做什么,而管理员也可以掌握每个开发者的权限,且管理维护容易。
坏处:如果服务器单点故障,就会导致大家都不能进行对版本的控制,即版本控制的权限仅在中央服务器上存在。
分布式版本控制工具:Git、Mercurial、Bazaar、Dares......
像分布式版本控制工具,客户端是把代码仓库完整的镜像下来(本地库)这样任何一处的协同工作文件发生故障,事后都可以通过其他的客户端的本地仓库进行恢复,因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份。
分布式的版本控制系统出现后,解决了集中式版本控制系统的缺陷:
1. 服务器断网时也可以进行开发(因为版本控制是在本地进行的)
2. 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
1.4Git简史
由linus创建从1991年到2002年Linux都是linus自己手动合并由各地提交的对于Linux优化改进的代码,2002年BitKeeper公司免费使用版本控制系统但是到了2005年Linux社区Andrew对于BirKeeper协议进行破解被发现BitKeeper收回Linux免费使用该软件的权限linus花费两周时间开发出了分布式版本控制系统Git,一个月后Linux系统代码由Git管理。
1.5Git的工作机制
工作区(本地存放的代码的磁盘地址)写代码—git add——》暂存区(临时存储)此时还未提交,可以删除——git commit——》本地库(此时生成历史版本)除了销毁本地库基本上你的文件的历史版本是删除不掉的——git push——》远程库
1.6Git和代码托管中心
代码托管中心是基于网络服务器的远程代码仓库,我们简称为远程库。
局域网:
GItLab
互联网:
GitHub(外网)
Gitee码云(国内网站)
第二章 Git安装
这里我就不具体细说了,去官网上下载下Git最新版本,安装的时候一路选择默认就好了。
第三章 Git常用命令
3.1 Git常用命令
命令名称 | 作用 |
git config-global user.name 用户名 | 设置用户签名 |
git config-global user.emall 邮箱 | 设置用户签名 |
git init | 初始化本地库 |
git status | 查看本地库状态 |
git add文件名 | 添加到缓存区 |
git commit-m”日志信息”文件名 | 提交到暂存区 |
git reflog | 查看历史记录 |
Git reset--hard版本号 | 版本穿梭 |
3.2 设置用户签名
(1)基本语法
git config-global user.name 用户名
git config-global user.emall 邮箱
(2)说明
签名作用是区分不同操作者身份,用户的签名信息在每一个版本的提交信息中能够看到,以此确认本次提交是谁做的。Git首次安装必须设置一下用户名,否则无法提交代码。
注意:这里设置的用户签名和将来登录GitHub(或者其他代码托管中心)的账号没有任何关系。
3.3 查看本地库状态
(1)基本语法
git init
(2)在你的的本地磁盘创建一个git 的仓库(文件夹),创建完成后在该文件里面(因为没有放东西,所以暂时是空的)鼠标右键一下打开Git Bash Here然后输入git init命令回车即可
此时你的文件里会生成一个.git文件夹里面是一些配置文件(尽量别去动它),如果没有就在你的操作栏上点击查看把隐藏文件勾选上(电脑一般是未勾选的)
这里的Git Bash Here弹出的操作框跟Linux系统一样,所用命令都相同。
而这里的.git就是你的工作区
3.4添加暂存区(就是git追踪文件的过程)
(1)基本语法
git add 文件名
(2)在Git Bash Here操作框里输入git add 文件名,里面的waring可以不用管一般是自动换换行符
之后可以继续查看文件的状态,当文件名从红色变为绿色
说明你的文件提交到了暂存区,如果想要删除该文件可以根据里面的提示内容(就是跟Linux系统的删除文件一样)命令是git rm--cached 文件名,这里只是把暂存区的文件删掉了,但是你的工作区里还是有该文件的。
3.5将暂存区的文件提交到本地库
(1)基本语法
git commmit -m“日志信息”文件名
(2)操作
红色下划线是提交的版本号
git log查看完整的日志信息
git reflog查看简化的日志信息
3.6修改文件
(1)操作命令
vim 文件名
修改后再wq保存下
(2)修改后你需要将文件再次的追踪以及提交本地库
这里说下,每次修改都相当再建了一个文件需要去再次的提交追踪
3.7历史版本
3.7.1查看历史版本
基本语法
git refolg查看版本信息
git log查看版本详细信息
3.7.2版本穿梭
基本语法0
git reset --hard 版本号
第四章 分支操作
从右向左看
4.1什么是分支
在版本控制过程中,同时推进多个任务,我们就可以创建每个任务的单独分支,使用分支意味着程序员可以把自己的工作从开发主线上分离开来,开发自己分支的时候,不会影响主线分支的运行。对于初学者而言,分支可以简单的理解为副本,一个分支就是一个单独的副本。(分支底层其实也就是指针的引用)
4.2分支的好处
同时并行推进多个功能开发,提高开发效率。
各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响,失败的分支删除重新开始即可。
4.3分支的操作
命令名称 | 作用 |
git branch 分支名 | 创建分支 |
git branch -v | 查看分支 |
git checkout 分支名 | 切换分支 |
git merge分支名 | 把指定的分支合并到当前分支上 |
4.3.1查看分支
(1)基本语法
git branch -v
(2)案例实操
4.3.2创建分支
(1)基本语法
git branch 分支名
(2)案例实操
4.3.3修改分支
(1)基本语法
git branch 分支名
4.3.4切换分支
(1)基本语法
git branch 分支名
(2)案例实操
红色标注 说明现在所处的分支,而星号*说明确实在该分支上
4.3.5合并分支
(1)基本语法
git branch 分支名
(2)案例实操(在master分支上合并hot-fix分支)
4.3.6产生冲突
冲突产生的表现:后面状态为MERFING
冲突产生的原因:
合并分支时,两个分支在同一个文件的同一个位置有两套完全不同的修改,GIt无法替我们决定使用哪一个,必须人为决定新代码的内容。
4.3.7解决冲突
(1)编辑有冲突的文件,删除特殊符号,决定要使用的内容
修改前
修改后
然后保存下添加到暂存区提交本地库(这一步不可以使用原来的文件名称)
(2)特殊符号:<<<<<<<HEAD 当前分支的代码 ======= 合并过来的代码 >>>>>>>hot-fix
注意:合并修改的只是当前的文件内容(比如我当前在master主线将hot-fix合并到master上我的hot-fix文件是不改变的,改变的只是master文件而已)
master、hot-fix其实都是指向具体版本记录的指针,当前所在的分支,其实是由HEAD决定的,所以创建分支的本质就是多创建一个指针。
HEAD如果指向master,那么我们现在就在master分支上
HEAD如果指向hot-fix,那么我们现在就在hot-fix分支上
所以切换分支的本质就是移动HEAD指针
第五章 Git团队协作机制
5.1团队协作机制
A先将自己的本地库推送(push)到代码托管中心(2)然后B从代码托管中心克隆(clone)A提交的代码到自己的本地库然后再完善下(3)当B完善好了再将完善过的代码推送(push)到代码托管中心(4)此时A再将代码托管中心里经过B完善后的代码拉取(pull)到自己的本地代码仓库。经过此番操作后完成了A、B、代码托管中心的代码统一。
5.2跨团队协作
(1)先将自己团队的代码公布到远程库(代码托管中心)(2)另一团队fork(叉)过来该代码然后克隆到本地仓库进行修改完善(3)代码修改完善后推送到远程库上(4)联系接受团队进行核实(5)审核通过后原来的团队将修改完善后的代码与自己原来的代码进行合并。