Git 简介
Git 是 Linus 大神耗时两周利用C语言写的一个分布式版本控制系统,最初目的是用来管理 Linux 系统源码。
Git 全面兼容Linux命令。
Git 特点
Git 对待数据的方法
Git 把数据看作是对小型文件系统的一组快照。
每次提交更新或在 Git 中保存项目状态时,它主要对当时的全部文件制作一个快照并保存这个快照的索引。 为了高效,如果文件没有修改,Git 不再重新存储该文件,而是只保留一个链接指向之前存储的文件。
近乎所有操作都是本地执行
在 Git 中的绝大多数操作都只需要访问本地文件和资源,一般不需要来自网络上其它计算机的信息。
Git 保证完整性
Git 中所有数据在存储前都计算校验和,然后以校验和来引用。
这意味着不可能在 Git 不知情时更改任何文件内容或目录内容。 若你在传送过程中丢失信息或损坏文件,Git 就能发现。
Git 用以计算校验和的机制叫做 SHA-1 散列(hash,哈希)。 这是一个由 40 个十六进制字符(0-9 和 a-f)组成字符串。
Git 一般只添加数据
执行的 Git 操作,几乎只往 Git 数据库中增加数据。 很难让 Git 执行任何不可逆操作,或者让它以任何方式清除数据。
安装Git
官网:https://git-scm.com/
- ubuntu系统安装:
sudo apt-get install git # 安装git
git --version # 查看安装的版本
Git 工作区、暂存区和版本库
- 工作区:指的是本地的工作目录
- 暂存区:英文叫
stage或者index。一般存放在.git/index中,所以我们把暂存区有时也叫作索引。 - 版本库:工作区有一个隐藏目录
.git,这个不算工作区,而是Git的版本库。

- 左侧为工作区,右侧为版本库。版本库中标记为
index的区域是暂存区,标记为master的是master分支所代表的目录树。 HEAD实际是指向master分支的一个"游标",所以图示的命令中出现HEAD的地方可以用master来替换。objects标识的区域为 Git 的对象库,位于.git/objects目录下,里面包含了创建的各种对象及内容。- 当对工作区修改或新增的文件执行
git add命令时,暂存区的目录树被更新,同时工作区修改或新增的文件内容被写入到对象库中的一个新的对象中,而该对象的ID被记录在暂存区的文件索引中。 - 当执行提交操作
git commit时,暂存区的目录树写到版本库中(对象库),master分支会做相应的更新。即master指向的目录树就是提交时暂存区的目录树。 - 当执行
git reset HEAD命令时,暂存区的目录树会被重写,被master分支指向的目录树所替换,但是工作区不受影响。 - 当执行
git rm --cached <file>命令时,会直接从暂存区删除文件,工作区则不做出改变。 - 当执行
git checkout .或者git checkout -- <file>命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。 - 当执行
git checkout HEAD .或者git checkout HEAD <file>命令时,会用HEAD指向的master分支中的全部或者部分文件替换暂存区和以及工作区中的文件。这个命令也是极具危险性的,因为不但会清除工作区中未提交的改动,也会清除暂存区中未提交的改动。
Git 管理的文件说明
- 所有的版本控制系统,其实只能跟踪文本文件的改动。
- 而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化。
- Microsoft的Word格式是二进制格式,因此,版本控制系统是没法跟踪Word文件的改动的。
- 不要使用Windows自带的记事本编辑任何文本文件。原因是Microsoft开发记事本的团队在每个文件开头添加了
0xefbbbf(十六进制)的字符,由此,你会遇到很多不可思议的问题,建议使用Notepad++。
- 注意编码格式防止乱码,建议使用
UTF-8编码,尤其是代码中存在中文注释要特别注意这一点。

浙公网安备 33010602011771号