目录
一、Git概述
1、Git工作机制
1.1 本地库工作机制
Git使用本地库在我们本地的电脑上就可以记录版本信息,不需要联网。
1.2 代码托管中心
代码托管中心负责维护远程库,让团队成员可以彼此协作。
局域网
Gitlab:如果有特殊需求不能使用外网的代码托管中心,可以在局域网内搭建自己的代码托管中心服务器。
Internet
GitHub:国外网站,有非常多优秀的开源项目托管代码,但是从国内访问很慢。
码云:国内的代码托管中心,在国内互联网开发圈子中的地位举足轻重。
1.3 远程库工作机制
团队内协作
跨团队协作
二、本地库命令行基本操作
1、初始化本地库
创建一个目录,使用命令初始化为本地库,会生成.git
文件。。
git init
2、设置用户签名
签名区分不同操作者身份。签名信息在每一个版本的提交信息中能够看到。
注意:这里设置用户签名和将来登录GitHub的账号没有任何关系。
git config --global user.name xiuluo
git config --global user.email 136366514@qq.com
执行生成配置文件
3、创建文件并进行版本控制
3.1 新建文件
新建hello.txt
3.2 查看本地库状态
git status
3.3 追踪文件并添加到暂存区
git add 文件
#提交全部
git add .
该命令有两个作用:
- 对“未追踪”的文件进行追踪,也就是加入版本控制体系,被Git管理。
- 将工作区的变动(新增和修改)添加到暂存区
3.4 再次查看本地库状态
检测到有新建的文件添加到了暂存区
3.5 将暂存区中的修改提交到本地库
git commit -m "本次提交描述" 提交文件
3.6 提交完成后再查看本地库状态
4、修改文件进行版本控制
4.1 修改文件后查看本地库状态
4.2 工作区文件修改后添加到暂存区
4.3 后续操作
提交后再次查看状态,如果操作正确应该还是看到“working tree clean”。
5、不add直接commit
两种情况:
- 新建的文件尚未纳入版本控制体系:必须先add纳入版本控制体系后才可以commit
- 已纳入版本控制体系的文件被修改:可以不add直接commit,Git自动执行了add
6、版本穿梭
6.1 查看版本记录
git reflog
6.2 切换到指定版本
git reset --hard 版本号
切换到第一个版本
从第一个版本修改hello.txt
后再次提交
6.3 底层其实是移动HEAD指针
三、本地库命令行分支操作
1、什么是分支
在使用版本控制工具开发的过程中,同时推进多个任务
2、分支的好处
- 同时并行推进多个功能开发,提高开发效率
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
3、分支操作
3.1 创建分支和切换分支
查看分支
git branch -v
创建分支
git branch 分支名
切换分支
git checkout 分支名
3.2 分支的底层实现
Git的分支操作之所以能够非常平滑,就是因为创建分支时,Git底层并没有把本地库中的内容复制出来,而仅仅是创建新的指针。有新版本提交后移动指针。
master、hotfix其实都是指向具体版本记录的指针。当前所在的分支,其实是由HEAD
决定的。
所以创建分支的本质就是多创建一个指针。
HEAD如果指向master,那么我们现在就在master分支上。
HEAD如果指向hotfix,那么我们现在就在hotfix分支上。
所以切换分支的本质就是移动HEAD指针。
3.3 在两个不同分支分别做不同修改
在hotfit
分支修改
提交
切换主分支修改hello.txt
git checkout master
vim hello.txt
git add hello.txt
git commit -m "fifth commit"
3.4 分支合并
合并分支时一定是涉及到两个分支。这两个分支一个是“当前所在分支”,一个是“目标分支”。
命令写法:git merge 目标分支
所以分支合并命令的本质就是把“目标分支”合并到“当前分支”。
例如:把hotfix合并到master
git merge hotfix
需要确保当前所在的分支是master例如:把master合并到hotfix
git merge master
需要确保当前所在的分支是hotfix
4、冲突
分支合并时,如果同一个文件的同一个位置有不同内容就会产生冲突。
4.1冲突的表现
Git使用<<<<<<<
、=========
、>>>>>>>>>>
标记出来产生冲突的内容。
- 表示HEAD指针指向的位置(其实就是当前分支)在冲突中的内容
<<<<<<< HEAD
hello world git2 fifth
=======
- 表示hotfix指针指向的位置在冲突中的内容
=======
hello world git2 fourth
>>>>>>> hotfix
所以所谓冲突其实就是让我们在这二者中选择一个,Git无法替我们决定使用哪一个。必须人为决定新代码内容。
此时使用git status命令查看本地库状态
4.2 冲突的解决
[1]第一步
编辑有冲突的文件,删除特殊符号,决定要使用的内容
[2]第二步
添加到暂存区git add hello.txt
使用git status
命令查看本地库状态
[3]第三步
执行提交
1
1
1
1
1
1
1
1
1
1