轉自https://www.cnblogs.com/cposture/p/git.html
0 基礎
我們知道Git有三大區(
工作區、暫存區、版本庫)以及幾個狀態(
untracked、unstaged、uncommited),下面只是簡述下Git的大概工作流程,詳細的可以參見本博客的其他有關Git的文章
【鏈接】。
(1)打開你的項目文件夾,除了隱藏的.git文件夾,其他項目文件位於的地方便是工作區,工作區的文件需要添加到Git的暫存區(git add),隨后再提交到Git的版本庫(git commit)。
(2)首次新建的文件都是untracked狀態(未跟蹤),此時需要git add到暫存區,Git便會在暫存區中生成一個該文件的索引,文件此時處於uncommited狀態,需要git commit生成版本庫。添加到了版本庫之后,再對文件進行修改,那么文件的狀態會變為unstaged狀態。
簡單的認識了Git的工作流程,接下來便可以看看如何刪除錯誤添加到暫存區或版本庫里的文件了!
1 刪除錯誤添加到暫存區的文件
有時你在工作區新建了文件TestFile,並且已經將它添加到了暫存區,git會告知,現有有一個文件未提交到版本庫,如下圖:

1.1 僅僅刪除暫存區里的文件
此時你想撤銷錯誤添加到暫存區里的文件,可以輸入以下命令:
-
git rm --cache 文件名

上面的命令僅僅刪除暫存區的文件而已,不會影響工作區的文件,如上圖,TestFile.txt仍然存在,此時輸入下面命令,git會告知有一個未跟蹤的文件TestFile.txt。
-
git status
1.2 刪除暫存區和工作區的文件
-
git rm -f 文件名
工作區的文件也被刪除了。

2 刪除錯誤提交的commit
有時,不僅添加到了暫存區,而且commit到了版本庫,這個時候就不能使用git rm了,需要使用git reset命令。
錯誤提交到了版本庫,此時無論工作區、暫存區,還是版本庫,這三者的內容都是一樣的,所以在這種情況下,只是刪除了工作區和暫存區的文件,下一次用該版本庫回滾那個誤添加的文件還會重新生成。
這個時候,我們必須撤銷版本庫的修改才能解決問題!
git reset有三個選項,--hard、--mixed、--soft。
//僅僅只是撤銷已提交的版本庫,不會修改暫存區和工作區 git reset --soft 版本庫ID
//僅僅只是撤銷已提交的版本庫和暫存區,不會修改工作區 git reset --mixed 版本庫ID
//徹底將工作區、暫存區和版本庫記錄恢復到指定的版本庫 git reset --hard 版本庫ID
(1)如果你是在提交了后,對工作區的代碼做了修改,並且想保留這些修改,那么可以使用git reset --mixed 版本庫ID,注意這個版本庫ID應該不是你剛剛提交的版本庫ID,而是
剛剛提交版本庫的上一個版本庫。如下圖:
(2)如果不想保留這些修改,可以直接使用徹底的恢復命令,git reset --hard 版本庫ID。
(3)為什么不使用--soft呢,因為它只是恢復了版本庫,
暫存區仍然存在你錯誤提交的文件索引,還需要進一步使用上一節的刪除錯誤添加到暫存區的文件,詳細見上文。
