#### **3.1创建本地仓库**
git init 在当前文件夹创建一个git管理的本地仓库
#### **3.2将工作区保存到暂存区**
git add xxx add命令不是添加一个文件,而是,将修改或新增的文件从动作去添加到当前版本库的暂存区中,表明此修改或新增的文件在下次commit提交的内容之中。
git add * 是将所有修改与新增的文件添加到暂存区。
当你的仓库根目录下设置了.gitignore文件并配置了忽略文件时,此时命令会报错,如下:
```
~~~bash
$ git add *
The following paths are ignored by one of your .gitignore files:
ignore.md
Use -f if you really want to add them.
fatal: no files added
~~~
```
如果强行使用git add -f * 命令,则会添加ignore.md文件。但这样.gitignore文件就没有意义了。
#### **3.3将暂存区提交到版本库**
git commit 将暂存区提交到本地仓库的版本库。如果没有被git add 添加到暂存区的文件不会被提交。
-m “xxxx”后面跟着为本次提交的说明。
-a 大意是将工作区中的所有修改或删除后的文件都提交到本地仓库,但新增的文件并不提交。
常用commit -m"aaa" -a 直接将更改从工作区提交到版本库,而不用经过暂存区。
#### **3.4撤销(重置)**
git reset --hard等价于git reset --hard HEAD即撤销工作区和暂存区中的所有修改,重置为版本库中HEAD指向的当前版本(未被修改的部分)。
而上一个版本就是**`HEAD^`**,上上个版本就是**`HEAD^^`**,当然往上写100个版本写100个^比较容易数不过来,所以写成HEAD~100.
或者也可以git reset --hard <commit_id>直接回溯到某个版本,<commit_id>指版本号(通过git log)查看,版本号没必要写全,前几位就可以了。
git reset<file>或git reset HEAD<file>撤销git add 到暂存区的修改
git checkout -- <file>撤销工作区的修改。
#### **3.5删除**
git rm<file>如果你已经把某个新增文件提交到版本库了。然后你想删除这个文件,那就用该命令将文件删除,再提交。使用该命令后,git的状态是:
```
~~~bash
$ git rm test.md
rm 'test.md'
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes to be committed:
(use "git reset HEAD <file>..." to unstage)
deleted: test.md
~~~
```
说明git rm会直接更新到暂存区。
删除文件其实还可以直接删除。如下:
```
~~~bash
$ ls
README.md ignore2.md test2.md
$ rm test2.md
$ ls
README.md ignore2.md
$ git status
On branch master
Your branch is up to date with 'origin/master'.
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
deleted: test2.md
no changes added to commit (use "git add" and/or "git commit -a")
~~~
```
此时没有直接更新到暂存区,可以通过git add/rm<file>来更新。同时可以通过git checkout --<file>来恢复这个文件。
#### **3.6查看状态**
git status显示工作区与暂存区的状态,比如哪些文件被修改了、哪些文件没保存在暂存区、谢谢文件没有提交等等。若存在没有被add的新文件(即未被git跟踪的文件),则会提示Untracked
```
~~~bash
$ git status
# On branch master
# Changes to be committed:
# (use "git reset HEAD <file>..." to unstage)
#
# new file: .gitignore
# deleted: ignore.md
#
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: test.md
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# ignore2.md
~~~
```
git status -s更简单地显示状态变化,如:显示 M controllers/article.go显示内容的每一行开头,M表示被修改、A表示被增加、??表示未受控制
#### **3.7查看不同**
git diff readme.text 查看readme.txt这个文件中具体什么内容别修改了。其中:
git diff 查看工作区和暂存区的区别
git diff --cached 查看暂存区和版本库之间的区别
git diff HEAD查看工作区和版本库之间的区别
#### **3.8 查看提交日志**
git log查看仓库版本库中(本地仓库和远程仓库的版本库是一样的)从最近到最远的版本信息。换言之,即每次提交的信息。
git log --graph显示版本以及分支图
git reflog 查看历史Git命令
#### **3.9隐藏工作**
当工作区的修改未提交,而我们邮箱将其隐藏起来时,就要用到git的stash功能
git stash 隐藏工作区和暂存区的修改,存储到一个地方、
git stash list 查看存储起来的工作现场
恢复工作现场有两种方法:
一是用git stash apply恢复,但是恢复后,stash内容并不删除,需要用git stash drop来删除;另一种方式是用git stash pop,恢复的同时把stash内容也删除了、。