文章目录
本地库操作
1. 本地库初始化
命令:git init
本地库初始化后,还要设置签名:
签名需要有用户名
、Email地址
,来区分不同开发人员的身份。
(1)项目级别 git config
:仅在当前本地库范围内有效。
- 例:
git config user.name fanchenaliang_pro
git config user.email [email protected]
(2)系统用户级别 git config --global
:登录当前操作系统的用户范围。
- 例:
git config --global user.name fanchenaliang_glb
git config --global user.email [email protected]
优先级:项目级别优先于系统用户级别,二者都有时,采用项目级别的签名。
注意:这里设置的签名与登录代码托管中心的用户名和Email地址没有任何关系。
实际开发时,只需要设置系统用户级别的就够了。
2. Git基本操作
2.1 添加&提交&状态查看
操作 | 命令 | 说明 |
---|---|---|
状态查看 | git status |
查看工作区、暂存区状态 |
添加 | git add [file name] |
将工作区的“新建/修改”添加到暂存区 |
撤销 | git rm --cached [file] |
将以添加到暂存区的内容撤回至工作区 |
提交 | git commit -m "commit message" [file name] |
将暂存区的内容提交到本地库 |
2.2 查看历史记录
命令 | 说明 |
---|---|
git log |
|
git log --pretty=oneline 或git log --oneline |
|
git reflog |
注意:git log --oneline 命令只显示当前命令之后的版本。
2.3 版本前进后退
版本前进后退的本质是对
Head指针
的操作。
三种方式,推荐第一种 | 说明 |
---|---|
git reset --hard [局部索引值] |
|
git reset --hard HEAD^ :一个^代表后退一个版本 |
|
git reset --hard HEAD~n :后退n步 |
reset 命令的三个参数的对比
--soft参数
:仅在本地库移动HEAD指针。--mixed参数
:在本地库移动HEAD指针,重置暂存区。--hard参数
:在本地库移动HEAD指针,重置暂存区,重置工作区。
可以理解为soft撤销了commit命令;mixed撤销了add和commit命令。
2.4 永久删除文件后找回
前提:删除前,文件存在时的状态已经提交到了本地库。
删除操作已经提交到本地库:git reset --hard HEAD[历史记录]
删除操作尚未提交到本地库:git reset --hard HEAD
2.5 比较文件差异
git diff [文件名]
:将工作区中的文件和暂存区进行比较。
git diff [本地库中历史版本] [文件名]
:将工作区中的文件和本地库历史记录比较。
不带文件名会比较多个文件。
3. 分支管理
在版本控制过程中,使用多条线同时推进多个任务的方法叫做分支。
- 同时并行推进多个功能开发,提高开发效率。
- 各个分支在开发过程中,如果某一个分支开发失败,不会对其他分支有任何影响。失败的分支删除重新开始即可。
1.3.1 分支操作
分支命令 | 说明 | 演示 |
---|---|---|
查看分支 | git branch -v |
|
创建分支 | git branch [分支名] |
|
切换分支 | git checkout [分支名] |
|
合并分支 | 先切换到接受合并的分支上,再git merger [有新内容的分支] |
1.3.2 合并时冲突的解决
当两个或分支都有修改且修改的是同一文件的同一位置,且内容不一致,此时就产生了合并冲突。解决冲突需要下面三步:
第一步:编辑文件,删除特殊符号,修改到满意为止,保存退出。
第二步:git add [文件名]
第三步:git commit -m "日志信息"
注意:此时 commit 一定不能带具体文件名
4. Git基本原理
4.1 Hash算法简介
哈希实际上是一个系列的加密算法,各个不同的哈希算法虽然加密强度不同,但是有以下几个共同点:
(1)无论输入数据的数据量有多大,输入同一个哈希算法,得到的加密结果长度固定。
(2)哈希算法确定,输入数据确定,输出数据能够保证不变。
(3)哈希算法确定,输入数据有变化,输出数据一定有变化,而且通常变化很大。
(4)哈希算法不可逆。
哈希算法可以被用来验证文件。原理如下图所示:
Git 底层采用的是 SHA-1 算法,就是靠这种机制从根本上保证数据完整性。
4.2 Git版本管理机制
集中式版本控制工具的文件管理机制(如SVN)
每一个版本只将文件的修改保存起来,需要某一个历史版本的数据时,需要获得当前修改、历史版本的修改、原始文件合并起来展现。这种增量式的版本控制,有利于节约服务器的存储空间。
分布式版本控制工具的文件管理机制(如Git)
Git 把数据看作是小型文件系统的一组快照。每次提交更新时 Git 都会对当前的全部文件制作一个快照并保存这个快照的索引。为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。所以 Git 的工作方式可以称之为快照流。
各个版本之间的历史记录,通过各个版本之间的父子关系建立,类似于链表。
在Git版本管理机制的基础上,Git分支管理的本质是创建和移动指针。