>我们都知道现在任何一个项目如果没有一个版本控制,那绝对是一个很大的损失。当项目出现修改、删除失误时,告别ctl+Z或者重写的时代,现在一行命令就可以搞定。
下面的讲解根据实际项目进行操作流程讲解,基本思路是:
## 一 项目创建、初始化、推送远程分支
1.新建一个项目文件夹gitDemo,里面有test1.txt文本文件
```
$ mkdir gitDemo
$ vi test1.txt
```
2.将文件夹gitDemo初始化
```
$ cd gitDemo
$ git init
```
3.切换分支master
```
$ git branch master
```
4.修改test1.txt,添加一句话:“好好学习”
```
$ vi test1.txt
```
5.查看当前状态
```
$ git status
```

6.添加到暂存区
```
$ git add test1.txt //第一种写法
//git add . 第二种写法,意味着将所有文件全部提交
```
7.查看当前状态
```
$ git status
```

8.提交到版本库中
```
$ commit -m "初始化" //双引号里是提交的描述文字
```

9.推送到远程服务器master分支上
```
$ git fetch //更新一下
$ git push origin master //提交到远程分支 master
```
## 二 文件撤销修改、删除操作
### 修改
* 未提交 (在工作区)
1.如果再次修改test1.txt,添加 “情人节快乐”到其中
```
$ vi test1.txt
```
2.撤销修改
```
$ git checkout test1.txt // git checkout 文件名
```
* 已提交到暂存区
1.修改后已add的
```
$ vi test1.txt
$ git add test1.txt
```
2.撤销修改
```
$ git reset HEAD test1.txt
$ git checkout test1.txt
```
* 已提交到版本库
1.修改后,进行了add和commit
```
$ vi test1.txt
$ git add test1.txt
$ git commit -m "修改test1.txt,添加情人节快乐"
```
2.撤回
```
$ git log //查看提交版本号
$ git reset --hard commit_id //撤回到想要的版本号
```
1.

2.

3.撤回版本错误,查看版本号

此时使用`git log`会发现找不到之前提交的情人节快乐的版本。使用`git reflog`即可

再选择想要的版本号,进行`git reset --hard commit_id`
###误删
同修改
>git checkout其实是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”。
上传本地文件到git上:
```
git remote add master http://...
```
###修改commit的注释
1.最新一次提交
当你不小心,写错了提交的注视/信息,该如何处理呢。理论上,SCM是不应该修改历史的信息的,提交的注释也是。
不过在git中,其commit提供了一个--amend参数,可以修改最后一次提交的信息.但是如果你已经push过了,那么其历史最后一次,永远也不能修改了。
我使用git commit --amend已经push过的
`# git commit --amend `
然后在出来的编辑界面,直接编辑注释的信息,保存退出
2.历史提交
git使用amend选项提供了最后一次commit的反悔。但是对于历史提交呢,就必须使用rebase了。
git rebase -i HEAD~3
表示要修改当前版本的倒数第三次状态。
这个命令出来之后,会出来三行东东:
pick:*******
pick:*******
pick:*******
如果你要修改哪个,就把那行的pick改成edit,然后保存退出。
这时通过git log你可以发现,git的最后一次提交已经变成你选的那个了,这时再使用:
git commit --amend
来对commit进行修改。
修改完了之后,要回来对不对?
使用git rebase --continue
OK,一切都搞定了。
[详细见这篇博客](http://blog.jobbole.com/78960/)