一:撤銷操作
比如我現在在readme.txt文件里面增加一行 內容為555555555555,我們先通過命令查看如下:
在我未提交之前,我發現添加5555555555555內容有誤,所以我得馬上恢復以前的版本,現在我可以有如下幾種方法可以做修改:
第一:如果我知道要刪掉那些內容的話,直接手動更改去掉那些需要的文件,然后add添加到暫存區,最后commit掉。
第二:我可以按以前的方法直接恢復到上一個版本。使用 git reset –hard HEAD^
但是現在我不想使用上面的2種方法,我想直接想使用撤銷命令該如何操作呢?首先在做撤銷之前,我們可以先用 git status 查看下當前的狀態。如下所示:
可以發現,Git會告訴你,git checkout — file 可以丟棄工作區的修改,如下命令:
git checkout – readme.txt,如下所示:
命令 git checkout –readme.txt 意思就是,把readme.txt文件在工作區做的修改全部撤銷,這里有2種情況,如下:
-
readme.txt自動修改后,還沒有放到暫存區,使用 撤銷修改就回到和版本庫一模一樣的狀態。
-
另外一種是readme.txt已經放入暫存區了,接着又作了修改,撤銷修改就回到添加暫存區后的狀態。
其實也就是撤銷到最后一次沒有放入暫存區的狀態。
對於第二種情況,我想我們繼續做demo來看下,假如現在我對readme.txt添加一行 內容為6666666666666,我git add 增加到暫存區后,接着添加內容7777777,我想通過撤銷命令讓其回到暫存區后的狀態。如下所示:
注意:命令git checkout — readme.txt 中的 — 很重要,如果沒有 — 的話,那么命令變成創建分支了。
git checkout -- * 是撤銷從上次提交之后所做的所有修改
git checkout -- filaname 是撤銷從上次提交之后的單個文件的修改
二:刪除文件。
假如我現在版本庫testgit目錄添加一個文件b.txt,然后提交。如下:
如上:一般情況下,可以直接在文件目錄中把文件刪了,或者使用如上rm命令:rm b.txt ,如果我想徹底從版本庫中刪掉了此文件的話,可以再執行commit命令 提交掉,現在目錄是這樣的
只要沒有commit之前,如果我想在版本庫中恢復此文件如何操作呢?
可以使用如下命令 git checkout — b.txt,如下所示:
再來看看我們testgit目錄,添加了3個文件了。如下所示:
三、干凈的回退到上次提交之后的東西:
我查了下有兩個相關的命令:
1. git clean -df
2. git reset --hard
但問題是第一個命令只刪除所有untracked的文件,如果文件已經被tracked, 修改過的文件不會被回退。而第二個命令只把tracked的文件revert到前一個版本,對於untracked的文件(比如編譯的臨時文件)都不會被刪除。
如果你有的修改以及加入暫存區的話
那么
git reset --hard
git clean -xdf
如果沒有加入暫存區的話 :(下面這個起效)
git checkout . && git clean -xdf
注意:git checkout -f 這條命令不會刪除新增的文件
git clean 小結
刪除 一些 沒有 git add 的 文件;
git clean 參數
-n 顯示 將要 刪除的 文件 和 目錄
-f 刪除 文件,-df 刪除 文件 和 目錄
git clean -n
git clean -df
git clean -f