Git 的根底概念
- 什么是 Git
Git
是一个 开源的分布式版本控制系统 ,是目前世界上 最先进 、 最风行 的版本控制系统。能够疾速高效地解决从很小到十分大的我的项目版本治理。
特点 :我的项目越大越简单,协同开发者越多,越能体现出 Git 的 高性能 和高可用性! -
Git 的个性
Git
之所以疾速和高效,次要依赖于它的如下两个个性:① 间接记录快照,而非差别比拟 ② 近乎所有操作都是本地执行
SVN
的差别比拟
传统的版本控制系统(例如SVN
)是 基于差别 的版本控制,它们存储的是 一组根本文件 和每个文件随工夫逐渐累积的差别SVN 的益处
节俭磁盘空间SVN 毛病
耗时、效率低在每次切换版本的时候,都须要在根本文件的根底上,利用每个差别,从而生成指标版本对应的文件-
Git
的记录快照
Git 快照 是在原有文件版本的根底上从新生成一份新的文件,相似于备份 。为了效率,如果文件没有批改,Git 不再从新存储该文件,而是只保留一个链接指向之前存储的文件。Git 快照毛病
占用磁盘空间较大Git 快照长处
版本切换时十分快,因为每个版本都是残缺的文件快照,切换版本时间接复原指标版本的快照即可。特点
空间换工夫,近乎所有的操作都只需拜访本地文件和资源个别不须要来自网上 其余计算机的信息个性
- 断网后仍旧能够在本地对我的项目进行版本治理
- 联网后,把本地批改的记录同步到云端服务器即可
Git
中的三个区域
应用Git
治理的我的项目,领有三个区域,别离是 工作区 、 暂存区、Git
仓库-
Git
中的三种状态- 已批改
modified
示意批改了文件,但还没将批改的后果放到 暂存区 - 已暂存
staged
示意对已批改文件的以后版本做了标记,使之蕴含在 下次提交的列表中 -
已提交
committed
示意文件曾经平安地保留在本地的 Git 仓库中
留神:- 工作区的文件被批改了,但还没有放到暂存区,就是 已批改 状态。
- 如果文件已批改并放入暂存区,就属于 已暂存 状态。
- 如果 Git 仓库中 保留着特定版本 的文件,就属于 已提交 状态。
- 已批改
-
根本的 Git 工作流程如下:
① 在工作区中批改文件 ② 将你想要下次提交的更改进行暂存 ③ 提交更新,找到暂存区的文件,将快照永久性存储到 Git 仓库
Git
根底
装置并配置 Git 点击下载相干的 Git 版本-
配置用户信息
装置完Git
之后,要做的第一件事就是设置本人的 用户名 和邮件地址。因为通过Git
对我的项目进行版本治理的时候,Git
须要应用这些根本信息,来记录是谁对我的项目进行了操作:git config --global user.name "yourname" git config --global user.email "yourname@qq.com"
留神 如果应用了 –global 选项,那么该命令只须要运行一次,即可永恒失效。
-
查看配置信息
按如此终端命令,疾速的查看 Git 的全局配置信息:# 查看所有的全局配置项 git config --list --global # 查看指定的全局配置项 git config user.name git config user.email
-
获取帮忙信息
# 想要获取 git config 命令的疾速参考 git config -h
- 获取
Git
仓库的两种形式
① 将尚未进行版本控制的本地目录 转换 为Git
仓库
② 从其它服务器 克隆 一个已存在的Git
仓库
以上两种形式都可能在本人的电脑上失去一个可用的 Git 仓库 - 在现有目录中初始化仓库
1. 在我的项目文件所在目录下关上终端
2. 执行 git init 命令初始化文件(会生成.git 暗藏文件夹 本机是看不到的)
3. 工作区中的文件的 4 种状态,这四种状态共分为两大类(被 Git 治理和未跟踪两种) -
移除文件
从 Git 仓库中移除文件的形式有两种:- 从 Git 仓库和工作区中 同时移除 对应的文件
- 只从 Git 仓库中移除指定的文件,但保留工作区中对应的文件
# 从 Git 仓库和工作区中同时移除 图书治理.js 文件 git rm -f index.js # 只从 Git 仓库中移除 index.css,但保留工作区中的 图书治理.css 文件 git rm --cached 图书治理.css
-
疏忽文件
- 个别咱们总会有些文件无需纳入
Git
的治理,也不心愿它们总呈现在未跟踪文件列表。在这种状况下,咱们能够创立一个名为.gitignore
的配置文件,列出要疏忽的文件的匹配模式。 -
文件
.gitignore
的格局标准如下:① 以 **# 结尾 ** 的是正文 ② 以 **/ 结尾 ** 的是目录 ③ 以 **/ 结尾 ** 避免递归 ④ 以 **! 结尾 ** 示意取反 ⑤ 能够应用 **glob 模式 ** 进行文件和文件夹的匹配(glob 指简化了的正则表达式)
- 星号 * 匹配 零个或多个任意字符
[abc]
匹配 任何一个列在方括号中的字符(此案例匹配一个 a 或匹配一个 b 或匹配一个 c)- 问号 ? 只匹配 一个任意字符
- 两个星号 ** 示意匹配 任意两头目录(比方 a/**/z 能够匹配 a/z、a/b/z 或 a/b/c/z 等)
- 在方括号中应用 短划线 分隔两个字符,示意所有在这两个字符范畴内的都能够匹配(比方 [0-9] 示意匹配所有 0 到 9 的数字)
- 个别咱们总会有些文件无需纳入
-
.gitignore
文件的例子# 疏忽所有的.a 文件 *.a # 即便后面疏忽了 .a 文件 但跟踪所有的 lib.a!lib.a # 只疏忽当前目录下的 TODO 文件 而不疏忽 subdir/TODO /TODO #疏忽任何目录下的名为 bulid 的文件夹 bulid/ #疏忽 doc/notes.txt 但不疏忽 doc/server/arr.txt doc/*.txt # 疏忽 doc/ 目录及其所有子目录的 .pdf 文件 doc/**/*.pdf
-
查看提交的历史
# 按工夫先后顺序列出所有的提交历史,最近的提交在最下面 git log # 只展现最新的两条提交历史,数字能够按需进行填写 git log -2 # 在一行上展现最近两条提交历史的信息 git log -2 --pretty=oneline # 在一行上展现最近两条提交历史信息,并自定义输入的格局 # &h 提交的简写哈希值 %an 作者名字 %ar 作者订正日志 %s 提交阐明 git log -2 --pretty=format:"%h | %an | %ar | %s"
-
回退到指定的版本
# 在一行上展现所有的提交历史 git log --pretty=oneline # 应用 git reset --hard 命令,依据指定的提交 ID 回退到指定版本 git reset --hard <CommitID> # 在旧版本中应用 git reflog --pretty=oneline 命令,查看命令操作的历史 git reflog --pretty=oneline # 再次依据最新的提交 ID,跳转到最新的版本 git reset --hard <CommitID>