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管理和未跟踪两种)1.初始的文件是未跟踪状态 使用 git status 可以查看到文件出现在 `Untracked files`(未跟踪的文件) 下面 2.以精简的方式显示文件状态 ` git status -s //未跟踪状态 精简的方式是以两个红色?开头 git status // 文件的颜色是 红色的 ` 3.需要被Git托管的话 使用命令 `git add '图书管理.html'` 4.使用 git status 可以查看状态 ,会看到 `图书管理.html` 文件在 `Changes to be committed` 这行的下面,说明已被跟踪,并处于暂存状态 ` git status \-s //精简的方式是以 一个绿色A?开头,这里是新提交的 也就是第一次提交 git status // 文件的颜色是 绿色的 ` 5.此时文件再暂存区域 需要使用 git commit -m 命令将文件提交到Git仓库 6.`-m` 选项后面是本次的提交消息,用来对提交的内容做进一步的描述 `git commit \-m "新建了index.html 文件"` 7.提交之后查看状态 git status ` On branch master nothing to commit working tree clean //证明工作区中所有的文件都处于‘未修改的’的状态 没有文件需要提交 ` 8.对已提交的文件进行修改 目前,`图书管理.html` 文件已经被 `Git` 跟踪,并且工作区和 `Git` 仓库中的 `图书理.html` 文件内容保持一致。当我们修改了工作区中 `图书管理.html` 的内容之后,再次运行 `git status` 和 `git status -s` 命令 `文件 `图书管理.html` 出现在 `Changes not staged for commit` 这行下面, 说明已跟踪文件的内容发生了变化,但还没有放到暂存区。` **注意** 修改过的、没有放入暂存区的文件前面有红色的 **M** 标记。 9.暂存已修改的文件目前, 工作区中的 `图书管理.html` 文件已被修改,如果要暂存这次修改,需要再次运行 `git add` 命令,这个命令是个多功能的命令,主要有如下 3 个功效: ① 可以用它开始跟踪新 ② 把已跟踪的、且已修改的文件放到暂存区 ③ 把有冲突的文件标记为已解决状态 `查看状态 文件\`图书管理.html\`出现在\`changes to be commited\` 说明已经被修改的文件存储在缓存中 颜色是绿色 如果是精简的话 前面是绿色的M` 10.提交已暂存的文件 `再次运行 \`git commit \-m "提交消息"\` 命令, 即可将暂存区中记录的 \`图书管理.html\` 的快照, 提交到 \`Git\` 仓库中进行保存:` 11.撤销修改的内容 `git checkout \-- 图书管理.html // 此时文件还没有进入暂存 // 如果进入缓存 这个命令是起不了作用的` 12.撤销缓存中内容 `git reset HEAD 图书管理.html. //撤销暂存中的某一个文件 git reset HEAD . //将缓存中的所有的文件都撤销下来` 13.跳过使用暂存区域 ``Git` 标准的工作流程是`工作区 → 暂存区 → Git 仓库`,但有时候这么做略显繁琐,此时可以跳过暂存区,直接将工作区中的修改提交到 `Git` 仓库,这时候 `Git` 工作的流程简化为了`工作区 → Git 仓库` `Git` 提供了一个跳过使用暂存区域的方式, 只要在提交的时候,给 `git commit` 加上 `-a` 选项,`Git` 就会自动把所有已经跟踪过的文件暂存起来一并提交,从而跳过 `git add` 步骤:` `git commit \-a \-m "日志信息"`
移除文件
从 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>
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。