## 初始化仓库
### 1.初始化一个Git仓库,使用`git init`命令。
### 2.添加文件到Git仓库,分两步:
1. 使用命令`git add <file>`,注意,可反复多次使用,添加多个文件;
2. 使用命令`git commit -m <message>`,完成。
### 3.使用gitlog查看历史版本
```
wangyijiadeMacBook-Air:August Notes bizzbee$ git log
commit c904e8cc7677ef0de3fd8ad09aca68eb8cdae383 (HEAD -> master)
Author: bizzbee <bizzbee@163.com>
Date: Wed Jul 31 16:34:27 2019 +0800
adad
commit f2eb811de2e57895c1f80d9061bcf6e0bf22a815
Author: bizzbee <bizzbee@163.com>
Date: Wed Jul 24 23:35:38 2019 +0800
first
```
### 4.退回到上一版本
>在Git中,用`HEAD`表示当前版本,上一个版本就是`HEAD^`,上上一个版本就是`HEAD^^`,当然往上100个版本写100个`^`比较容易数不过来,所以写成`HEAD~100`。
~~~
$ git reset --hard HEAD^
HEAD is now at e475afc add distributed
~~~
### 5.回到新版本
>回到新版本需要记住版本号。
~~~
$ git reset --hard 1094a
HEAD is now at 83b0afe append GPL
~~~
>记不住版本号可以使用reflog查看历史命令
```
wangyijiadeMacBook-Air:August Notes bizzbee$ git reflog
f2eb811 (HEAD -> master) HEAD@{0}: reset: moving to Head^
c904e8c HEAD@{1}: commit: adad
f2eb811 (HEAD -> master) HEAD@{2}: commit (initial): first
```
### 6.工作区 暂存区 版本库
#### 版本库(Repository)
工作区有一个隐藏目录`.git`,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支`master`,以及指向`master`的一个指针叫`HEAD`。
![](https://box.kancloud.cn/701e02bf0b2d71ab51b7e2b6aa973d52_458x234.jpg)
分支和`HEAD`的概念我们以后再讲。
前面讲了我们把文件往Git版本库里添加的时候,是分两步执行的:
第一步是用`git add`把文件添加进去,实际上就是把文件修改添加到暂存区;
第二步是用`git commit`提交更改,实际上就是把暂存区的所有内容提交到当前分支。
因为我们创建Git版本库时,Git自动为我们创建了唯一一个`master`分支,所以,现在,`git commit`就是往`master`分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。
### 7.撤销修改
`git checkout -- file`可以丢弃工作区的修改:
~~~
$ git checkout -- readme.txt
~~~
命令`git checkout -- readme.txt`意思就是,把`readme.txt`文件在工作区的修改全部撤销,这里有两种情况:
一种是`readme.txt`自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是`readme.txt`已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次`git commit`或`git add`时的状态。
### 8.删除文件
1. 要从版本库中删除该文件,那就用命令`git rm`删掉,并且`git commit`:
2. 另一种情况是删错了,因为版本库里还有呢,所以可以很轻松地把误删的文件恢复到最新版本:
~~~
$ git checkout -- test.txt
~~~
`git checkout`其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。