Git原理与使用------基础篇总结
一、什么是版本控制器
版本控制器是一个能让你了解文件历史以及发展过程的系统,通俗讲就是可以记录工程的每一次改动和版本迭代的管理系统,同时方便多人协同作业。
目前最主流的版本控制器就是Git。
注意事项
Git只能跟踪文本文件的改动(如TXT、网页、程序代码等),可以告诉你每次改动的具体内容(比如在第5行加了一个单词,在第8行删了一个单词)。
而图片、视频等二进制文件,版本控制系统只能知道文件大小变了,但没法跟踪具体改了什么。
二、Git安装
Linux(CentOS)
bash
sudo yum -y install git
git --version # 查看版本
Linux(Ubuntu)
bash
sudo apt-get install git -y
git --version
Windows
参考相关安装教程即可。
三、Git基本操作
1. 创建本地仓库
bash
git init
执行后,当前目录下会多出一个.git的隐藏目录,这就是Git用来跟踪管理仓库的目录,不要手动修改里面的文件。
2. 配置用户信息
安装Git后首先要设置用户名称和email地址:
bash
git config [--global] user.name "Your Name"
git config [--global] user.email "email@example.com"
--global:可选,表示这台机器上所有Git仓库都使用这个配置- 如果不加,只对当前仓库生效
查看配置:
bash
git config -l
删除配置:
bash
git config [--global] --unset user.name
git config [--global] --unset user.email
四、工作区、暂存区、版本库
这是Git最核心的概念,必须理解!
| 概念 | 说明 |
|---|---|
| 工作区 | 电脑上你要写代码或文件的目录 |
| 暂存区(stage/index) | 存放在.git/index文件中,也叫索引 |
| 版本库(repository) | 工作区中的.git目录,Git用它来管理所有文件 |
三者关系图
工作区 → git add → 暂存区 → git commit → 版本库
- 在工作区新增/修改文件后,文件还没有被Git管理
- 执行
git add后,文件被添加到暂存区 - 执行
git commit后,暂存区的内容被写入版本库
关键理解:通过新建或粘贴进目录的文件,只是在工作区新增了文件。必须要通过
git add和git commit才能将文件添加到仓库中进行管理!
五、添加文件
git add ------ 添加到暂存区
bash
git add [file1] [file2] # 添加一个或多个文件
git add [dir] # 添加指定目录(包括子目录)
git add . # 添加当前目录下的所有文件改动
git commit ------ 提交到本地仓库
bash
git commit -m "message" # 提交暂存区全部内容
git commit [file1] [file2] -m "msg" # 提交暂存区的指定文件
注意 :
-m后面的描述信息绝对不能省略!这是给人看的提交说明。
示例
bash
# 第一次提交
vim ReadMe
git add ReadMe
git commit -m "commit my first file"
# 多次add,一次commit
touch file1 file2 file3
git add file1
git add file2
git add file3
git commit -m "add 3 files"
查看提交历史
bash
git log # 显示详细提交日志
git log --pretty=oneline # 简洁显示(一行一个提交)
输出的长串数字是commit id(版本号),由SHA1计算得出,不是简单的1、2、3递增数字。
六、查看.git目录
理解.git目录有助于深入理解Git原理:
bash
.git/
├── HEAD # 默认指向master分支的指针
├── index # 暂存区
├── refs/
│ └── heads/
│ └── master # 保存当前master分支最新的commit id
└── objects/ # Git的对象库,存放所有版本库对象
关键文件内容
bash
# HEAD指向当前分支
cat .git/HEAD # 输出: ref: refs/heads/master
# master分支指向的最新commit
cat .git/refs/heads/master # 输出: 23807c5369...(commit id)
查看对象内容
bash
git cat-file -p [commit_id] # 查看提交对象
git cat-file -p [tree_id] # 查看树对象
git cat-file -p [blob_id] # 查看文件内容对象
七、修改文件
Git跟踪的是修改,而非文件本身。修改包括:新增一行、删除一行、更改字符、创建新文件等。
查看状态
bash
git status # 查看工作区和暂存区的状态
查看差异
bash
git diff [file] # 显示暂存区和工作区文件的差异
git diff HEAD -- [file] # 显示版本库和工作区文件的区别
提交流程
bash
git add ReadMe
git commit -m "modify ReadMe"
八、版本回退
git reset命令
bash
git reset [--soft | --mixed | --hard] [HEAD]
| 参数 | 暂存区 | 工作区 | 说明 |
|---|---|---|---|
--soft |
不变 | 不变 | 只回退版本库 |
--mixed(默认) |
回退 | 不变 | 暂存区退回指定版本 |
--hard |
回退 | 回退 | 工作区也会回退,谨慎使用! |
HEAD的表示方式
| 写法 | 含义 |
|---|---|
HEAD |
当前版本 |
HEAD^ |
上一个版本 |
HEAD^^ |
上上一个版本 |
HEAD~n |
往上n个版本 |
commit id |
指定版本 |
示例
bash
# 回退到上一个版本(工作区也回退)
git reset --hard HEAD^
# 查看所有操作记录(找回被回退的commit id)
git reflog
# 使用部分commit id恢复到指定版本
git reset --hard d95c13f
版本回退的本质
Git内部有一个指向当前分支的HEAD指针,回退版本时,Git仅仅是修改refs/heads/master中存储的commit id。
九、撤销修改
情况一:工作区修改,还没有add
bash
git checkout -- [file] # 丢弃工作区的修改
情况二:已经add,但还没有commit
bash
git reset HEAD [file] # 将暂存区回退(--mixed是默认参数)
git checkout -- [file] # 再丢弃工作区修改
情况三:已经commit,但还没有push
bash
git reset --hard HEAD^ # 回退到上一个版本
注意:如果已经推送到远程仓库,就比较麻烦了。
十、删除文件
误删恢复
bash
git checkout -- [file] # 从版本库恢复被删除的文件
确实要删除
bash
git rm [file] # 从暂存区和工作区删除
git commit -m "delete file" # 提交删除操作
核心命令速查表
| 命令 | 作用 |
|---|---|
git init |
初始化本地仓库 |
git config |
配置用户信息 |
git add |
添加文件到暂存区 |
git commit -m "msg" |
提交到本地仓库 |
git status |
查看仓库状态 |
git log |
查看提交历史 |
git reflog |
查看所有操作记录 |
git diff |
查看文件差异 |
git reset --hard HEAD^ |
版本回退 |
git checkout -- [file] |
丢弃工作区修改 |
git rm |
删除文件 |
理解模型
工作区(写代码的地方)
↓ git add
暂存区(临时存放区)
↓ git commit
版本库(永久存储)
核心思想:所有对文件的修改,都要经过"工作区 → 暂存区 → 版本库"这条路径,才能真正被Git管理起来。这也是Git与其他版本控制系统的重要区别。