一、Git特点
1.Git是目前世界上最先进的的分布式版本控制系统。
集中式版本控制系统:文件版本都放在服务器上,服务器故障可能造成客户端在服务器故障的时间内无法提交文件。如果服务器修复不好,数据会丢失。
分布式版本控制系统:把服务器上的代码仓库完整地镜像下来。如果服务器发生故障,可以利用客户端的数据进行数据恢复。每一次的提取操作,实际上都是一次对代码仓库的完整备份。
2.直接记录快照,而非差异比较
其它版本控制系统,关注文件内容的变化。记录那些文件做了更新,更新了那些内容。
Git 更像是把变化的文件作快照后,记录在一个微型的文件系统中。每次提交更新时,它会纵览一遍所有文件的指纹信息并对文件作一快照,然后保存一个指向这次快照的索引。为提高性能,若文件没有变化,Git 不会再次保存,而只对上次保存的快照作一链接。
![](https://i-blog.csdnimg.cn/blog_migrate/8f9a47e452ee2326fac5360f3e1979f5.png)
3.无需联网操作
git绝大多数操作只需要访问本地文件和资源。
4.只对文本数据类型有效(图片无效)
图片版本控制只能知道图片大小的变化
二、安装
Git支持Linux、Windows和Mac系统,Git官网下载安装包。
选择非中文,无空格路径
为了支持Linux文本编辑,选择VIM
逐个点击next-install完成安装
三、工作原理流程
1.概念
远程仓库:远程机器的代码库,用于做不同版本库文件交换更新。比如Gitlab Github Gitee。
本地库:用户在本地创建的目录,拥有远程库的一个快照。包括下面:
- 工作区:本地库的根目录中除.git目录以外的内容,存储内容的实际文件。
- 暂存区:暂存信息存放在.git目录"下的index文件(.git/index)中,用于临时保存内容的修改;
- 版本库:是本地库的根目录中的一个隐藏目录.git,用于记录版本信息,Git进行版本控制所需要的文件,则都放在.git文件夹中;
分支:相当于将原来的代码锁定,创建一个副本编辑,如果确定修改就把副本合并到原来的,保存修改。
本地库中默认创建一个主(master)分支,分支意味着你可以从开发主线上分离开来,然后在不影响主线的同时继续工作。
2.工作流程
克隆远程库--在本地库上修改代码(默认创建了分支)--提交到分支--把修改合并到本地主分支--把远程库合并到本地主分支--把本地主分支提交到远程库
四、git命令
1.创建版本库
文件夹 下右键点击gitbash here
pwd显示当前路径
git init 把这个目录变成git可以管理的仓库(自动创建分支master,已经指针HEAD)
.git的目录是Git来跟踪管理版本的不要手动乱改这个目录里面的文件,否则,会把git仓库给破坏了
2.添加文件和修改提交文件
vim test.txt
创建文件test.txt, 此刻文件在工作区
通过git status可以查看文件追踪的情况
使用命令 git add test.txt添加到暂存区里面去。(注:git add .将所有的工作区文件上传到缓存区;add后跟多个参数上传多个文件。
git rm --cached test.txt 从暂存区撤回到工作区
git commit -m 'first commit'
提交错误,因为.git下的config配置文件,没有配置操作人名字和邮箱
git的配置问题
git配置信息用于标明当前做的修改是谁做的。
git的配置信息有三个级别:仓库级别、用户级别、系统级别
- 优先级:仓库级别>用户级别>系统级别
- 仓库级别:位于当前git工作区的.git/config文件中
- 用户级别:位于C盘用户目录下的.gitconfig中
- 系统级别:位于git安装目录下的etc/,gitconfig文件中
例子:当公司中不同时间段,不同的人使用同一个电脑做同一个项目时,用仓库级别配置。
当公司中一个人参与多个项目时,用用户级别配置。
如果没有配置信息提交会失败:
设置配置信息:
git config --global user.name 姓名
git config --global user.email 邮箱
添加到暂存区,再次提交,成功
修改文件,在文件中加入一行。查看git的状态(新的版本已经进入暂存区并且用modified标记这是修改过的文件)
提交修改后的文件
通过checkout上一个版本的文件来覆盖修改后的文件
3.版本回退(三种方式)
git reset --hard HEAD^
git reset --hard HEAD~1
git reset --hard sha-1值
查看日志
git log
版本回退上一个版本
git reset --hard HEAD^
版本回退上一个版本
git reset --hard HEAD^^
指定回退前几版本
git reset --hard HEAD~100
回退&撤销
注意:版本1->版本2—>回退到版本1。回退后使用git log命令就查找不到版本2的sha-1值了。要用git reflog查看历史进行过的操作。
git reflog
git reset --hard sha-1值
添加并且提交了多个文件
4.删除文件
git rm test2.txt
我们发现删除的文件直接进入暂存区(此刻需要注意,这只是假删除,还要提交一下。如果进入暂存区可以退回工作区,使用下面命令 git reset hard test2.txt