>我們都知道現(xiàn)在任何一個(gè)項(xiàng)目如果沒有一個(gè)版本控制,那絕對(duì)是一個(gè)很大的損失。當(dāng)項(xiàng)目出現(xiàn)修改、刪除失誤時(shí),告別ctl+Z或者重寫的時(shí)代,現(xiàn)在一行命令就可以搞定。
下面的講解根據(jù)實(shí)際項(xiàng)目進(jìn)行操作流程講解,基本思路是:
## 一 項(xiàng)目創(chuàng)建、初始化、推送遠(yuǎn)程分支
1.新建一個(gè)項(xiàng)目文件夾gitDemo,里面有test1.txt文本文件
```
$ mkdir gitDemo
$ vi test1.txt
```
2.將文件夾gitDemo初始化
```
$ cd gitDemo
$ git init
```
3.切換分支master
```
$ git branch master
```
4.修改test1.txt,添加一句話:“好好學(xué)習(xí)”?
```
$ vi test1.txt
```
5.查看當(dāng)前狀態(tài)
```
$ git status
```

6.添加到暫存區(qū)
```
$ git add test1.txt? ? //第一種寫法
//git add .? ? ? ? 第二種寫法,意味著將所有文件全部提交
```
7.查看當(dāng)前狀態(tài)
```
$ git status
```

8.提交到版本庫中
```
$ commit -m "初始化"? ? //雙引號(hào)里是提交的描述文字
```

9.推送到遠(yuǎn)程服務(wù)器master分支上
```
$ git fetch? ? //更新一下
$ git push origin master? //提交到遠(yuǎn)程分支 master
```
## 二 文件撤銷修改、刪除操作
### 修改
* 未提交 (在工作區(qū))
1.如果再次修改test1.txt,添加 “情人節(jié)快樂”到其中
```
$ vi test1.txt
```
2.撤銷修改
```
$ git checkout test1.txt? // git checkout 文件名
```
* 已提交到暫存區(qū)
1.修改后已a(bǔ)dd的
```
$ vi test1.txt
$ git add test1.txt
```
2.撤銷修改
```
$ git reset HEAD test1.txt
$ git checkout test1.txt
```
* 已提交到版本庫
1.修改后,進(jìn)行了add和commit
```
$ vi test1.txt
$ git add test1.txt
$ git commit -m "修改test1.txt,添加情人節(jié)快樂"
```
2.撤回
```
$ git log? ? //查看提交版本號(hào)
$ git reset --hard commit_id? //撤回到想要的版本號(hào)
```
1.

2.

3.撤回版本錯(cuò)誤,查看版本號(hào)

此時(shí)使用`git log`會(huì)發(fā)現(xiàn)找不到之前提交的情人節(jié)快樂的版本。使用`git reflog`即可

再選擇想要的版本號(hào),進(jìn)行`git reset --hard commit_id`
###誤刪
同修改
>git checkout其實(shí)是用版本庫里的版本替換工作區(qū)的版本,無論工作區(qū)是修改還是刪除,都可以“一鍵還原”。
上傳本地文件到git上:
```
git remote add master http://...
```
###修改commit的注釋
1.最新一次提交
當(dāng)你不小心,寫錯(cuò)了提交的注視/信息,該如何處理呢。理論上,SCM是不應(yīng)該修改歷史的信息的,提交的注釋也是。
? 不過在git中,其commit提供了一個(gè)--amend參數(shù),可以修改最后一次提交的信息.但是如果你已經(jīng)push過了,那么其歷史最后一次,永遠(yuǎn)也不能修改了。
? 我使用git commit --amend已經(jīng)push過的
`# git commit --amend? `
然后在出來的編輯界面,直接編輯注釋的信息,保存退出
2.歷史提交
? ? git使用amend選項(xiàng)提供了最后一次commit的反悔。但是對(duì)于歷史提交呢,就必須使用rebase了。
? ? ? git rebase -i HEAD~3
? ? ? 表示要修改當(dāng)前版本的倒數(shù)第三次狀態(tài)。
? ? ? ? 這個(gè)命令出來之后,會(huì)出來三行東東:
? ? ? ? pick:*******
? ? ? ? pick:*******
? ? ? ? pick:*******
? ? ? ? 如果你要修改哪個(gè),就把那行的pick改成edit,然后保存退出。
? ? ? ? 這時(shí)通過git log你可以發(fā)現(xiàn),git的最后一次提交已經(jīng)變成你選的那個(gè)了,這時(shí)再使用:
? ? ? ? git commit --amend
? ? ? ? 來對(duì)commit進(jìn)行修改。
修改完了之后,要回來對(duì)不對(duì)?
? ? ? ? 使用git rebase --continue
? ? ? ? OK,一切都搞定了。
[詳細(xì)見這篇博客](http://blog.jobbole.com/78960/)