1.what
分布式版本控制系统
2.why
可以并行多人远程协作,并保留各个站点的历史记录
3.流程图
- 团队内部协作
- 团队外部协作
4.git本地仓库的初始化
在git bash命令窗口中,需要创建仓库的目录下执行:$git init
命令
常用Linux命令:
$ll
:查看本目录下的文件和文件夹$ls -lA
:查看隐藏文件$ls -l|less
:分屏查看$cd 文件夹名/
:进入到某个文件夹$pwd
:查看当前绝对路径
5.用户签名【用于连接远程仓库时识别】
$git config --global user.name tom_glb
:设置用户名
git config --global goodMorning_pro@atguigu.com
:设置户用邮箱
~/.gitconfig
:信息保存位置 ~代表电脑用户名目录
6.基本操作
-
状态查看
$git status
查看工作区、 暂存区状态 -
添加
$git add [file name]
将工作区的“新建/修改” 添加到暂存区 -
提交
$git commit -m "commit message" [file name]
将暂存区的内容提交到本地库
-
查看历史记录
$git log
多屏显示控制方式:
空格向下翻页
b 向上翻页
q 退出
$git log --pretty=oneline
$git log --oneline
$git reflog
HEAD@{移动到当前版本需要多少步}
-
版本后退
基于索引值操作[推荐]
git reset --hard [局部索引值]
git reset --hard a6ace91
-
删除文件并找回
前提: 删除前, 文件存在时的状态提交到了本地库。
git reset --hard [指针位置]
删除操作已经提交到本地库: 指针位置指向历史记录
删除操作尚未提交到本地库: 指针位置使用 HEAD -
版本比较
比较文件差异
git diff [文件名]
将工作区中的文件和暂存区进行比较
git diff [本地库中历史版本] [文件名]
将工作区中的文件和本地库历史记录比较
不带文件名比较多个文件 -
分支操作
1.什么是分支:在版本控制过程中, 使用多条线同时推进多个任务。
2.分支的好处:
同时并行推进多个功能开发, 提高开发效率
各个分支在开发过程中, 如果某一个分支开发失败, 不会对其他分支有任何影响。 失败的分支删除重新开始即可。
3.分支操作
创建分支
git branch [分支名]
查看分支
git branch -v
切换分支
git checkout [分支名]
合并分支
第一步: 切换到接受修改的分支(被合并, 增加新内容) 上
git checkout [被合并分支名]
第二步: 执行 merge 命令
git merge [有新内容分支名]
4.解决冲突
冲突的表现
冲突的解决:不同分支分别对项目的同一处内容进行修改后合并时,计算机不知道哪个分支占主导地位,此时需要人为进行合并时项目的修改。
第一步: 编辑文件, 删除特殊符号
第二步: 把文件修改到满意的程度, 保存退出
第三步:git add [文件名]
第四步:git commit -m "日志信息"
注意: 此时 commit 一定不能带具体文件名
7.git原理
- 不同的文件【一丁点的不同】通过哈希算法之后,哈希值不同
- 相同的文件经过同一哈希算法之后,哈希值相同
所以可以通过哈希算法来对比服务端的文件和下载下来的文件是否相同,有无数据的丢失
且:在进行git的版本控制时,每一个版本的commit会对应生成一个哈希值,下一个版本的哈希值指向上一个版本的哈希值指针,形成一个链式的图
- 每一次修改记录对象一个哈希值,每一个分支的版本有一个哈希tree管理所有的记录哈希值,每一个版本的commit创建一个哈希对象
- 每一个版本的哈希对象通过链表连接
- 分支的创建原理【指针的移动创建版本哈希值】
每一个分支对应一个指针,切换分支时,只是指针HEAD
的移动,这样就大大的节省了空间,不用每一个分支都对仓库数据进行copy。