1.版本控制系统
本身是一个软件,它能够记录一个或若干个文件的变化
1.1本地版本控制系统
指的是在本地开发,实现版本的手动控制
缺点:不能进行多人协作
1.2集中式版本分布系统
有一台中央处理的服务器,用于管理代码,所有的代码都要上传到这个中央服务器上
优点:解决了多人协作的问题,所有人通过中央处理器实现代码同步
缺点:
1.特别依赖中央处理服务器
2.特别依赖网络
1.3分布式版本控制系统
有一个远程的仓库用于存储代码,每个用户的本地会生成远程仓库的完整镜像,生成本地仓库,每个人通过将代码保存到本地仓库中,本地仓库会在有网络的的时候将数据同步到远程仓库中,远程仓库发生更新,会将数据同步到每个用户的本地仓库中,实现代码同步
优点:
1.解决了多人协作的开发问题
2.不是特别的依赖于远程仓库
3.不是特别的依赖于网络
2.git的使用
2.1git版本控制的三个区
工作区:用户编辑代码的区域,一般指的是编辑器的编辑的区域
暂存区:和仓库区一样,保存在.git的隐藏文件夹内部
仓库区:保存在.git的隐藏文件夹下
文件的保存的流程:工作区--->暂存区--->仓库区
第一次使用需要配置邮箱和用户名,配置命令如下:
配置邮箱:git config --global user.email "邮箱"
配置用户名: git config --global user.name
2.2初始化git
命令:git init
作用:会自动生成一个.git的隐藏文件夹
2.3查看文件状态
命令:git status
简化命令:git status -s
作用:查看当前文件的状态,红色表示在工作区,绿色表示在暂存区
2.4添加到暂存区
命令:git add . / --all /-A 表示将所有内容添加到暂存区
git add css 表示将css文件夹添加到暂存区
git add *.js 表示将所有js文件添加到暂存区
git add ...
作用:将文件或文件夹添加到暂存区
2.5添加到仓库区
命令: git commit -m "说明信息"
快速提交:git commit -a -m "说明信息"
修改最近的一次说明信息: git commit -amend -m “说明信息”
作用:将文件内容从暂存区提交到仓库区
2.6查看保存日志
命令:git log 查看仓库区完整的提交日志
git log --oneline 查看简化版的提交日志
git reflog 查看所有的日志信息
作用:可查看当前仓库区提交的日志
2.7查看当前用户信息
命令:git config --list
重置当前用户的邮箱和用户名
重置邮箱:git config --unset --global user.email
重置用户名:git config --unset --global user.name
2.8比较区的内容
命令:
比较 工作区 和 暂存区:git diff
比较 暂存区 和 仓库区:git diff --cached
比较 工作区 和 仓库区 :git diff HEAD
比较仓库区版本的内容:git diff 版本号1 版本号2
如果版本号2的内容多于版本号1的内容,差异部分显示绿色,如果版本号2的内容小于版本号1的内容,差异部分显示红色
2.9重置版本
命令:git reset 暂无
重置仓库区:git reset --soft
重置暂存区和仓库区:git reset --minxed
重置版本的工作区、暂存区和仓库区:git reset --hard
将版本回退到上一个版本: git reset --hard head~1
将版本回退到上上个版本:git reset --hard head~2
2.10分支操作
为什么要使用分支?
如果一半的代码不提交可能会丢失,但是提交了可能会影响别人的开发进度,这个时候就需要要分支控制了
分支控制的特点:分支之间是独立的,不会相互影响
分支的目的:保证功能独立性,一般开发复杂的功能都会先开一个分支,在分支中进行提交,等功能完成后,一次性合并到主分支
分支的实现原理:
1.每次commit提交,都会在仓库区生成一个版本号
2.在第一次生成版本后,会自动创建一个master的指针,指向当前的版本
3.所有的分支在本质上就是指针
4.默认就有一个HEAD的指针,永远指向当前的分支
命令:
查看所有分支: git branch 当前的分支的颜色是绿色的,而且前面有一个白色的小雪花
创建分支:git branch 分支名称
切换分支 : git checkout 分支名称
删除分支:git branch -d 分支名
合并分支:git merge 分支名称 如果当前分支是合并分支的祖先分支,可以进行快速合并
快速创建并切换:git branch -a 分支名
合并分支:
1.如果当前分支是合并分支的祖先分支,可进行快速合并
2.如果当前分支不是祖先分支,可能会产生冲突(即同时修改同一文件)
3.合并分支时,如果出现冲突,只能手动处理,再次提交,一般的作法,把自己的代码放到冲突代码的后面即可。