1. 神器:不懂的用法直接githelp cmd。cmd爲你想查看的命令。
2. 從倉庫中拉出所有文件
簡單理解,等同於不小心把文件全部刪除了,只剩下倉庫。簡單地執行gitreset –hard即可;
3. git reset的三種模式
要理解reset的模式,先明確git的提交流程:
1. 修改工作樹
2. git add,對當前修改生成快照
3. git commit,提交當前的修改。
當然,通常情況下,可以用git commit -a,相當於同時做第2、3步。
--soft:不修改工作樹中的文件和倉庫索引,保留了add生成的快照,只是退回了commit的過程(相當於退回到commit前,add後);
--mixed:不修改工作樹,修改了倉庫索引,不保留快照,相當於退回了commit和add兩個過程;
--hard:修改工作樹,相當於所有東西,包括工作樹和倉庫,原原本本地退回到指定的<commit>
4. git回退版本——恢復所有文件
由於git 沒有svn方便的update to revision功能,所以只能另尋替代功能了。
如果你要乾乾淨淨地回到之前某個版本,在此之後的所有提交都不需要保留。那麼簡單地進行reset即可:
$ git reset --hard <commit>
或
$ git checkout <commit>
<commit>爲你要退回的版本號。但是如果你只是想回去查看一下以前的代碼,看完後需要回到最新的HEAD上來,有兩種方法:一是reset前先記住當前HEAD的commit號,用gitcheckout命令時也會有提示當前HEAD號的功能。當然這樣做有風險,萬一忘了HEAD號退不回去了,那就萬事over了;二是gitreset前先建一個新的branch,在新branch上隨便你折騰,最後刪除這個不用的branch即可;推薦用二。
5. git回退版本——恢復單個文件
因爲gitreset在帶--hard的情況下不能加目錄名,所以此時只能是gitcheckout派上用場了。
丟棄當前所有更改,回到HEAD的版本:
$ git checkout <path>
回到之前的某個版本
$ git checkout <commit> <path>
注意:此時對應文件已被更改,但是已處於被add的狀態,所以用gitdiff是看不到其與當前HEAD上對應文件的區別的,除非用gitdiff --cache或執行:
$ git reset
這種方法不僅可以回到當前branch的某次提交,也可以將非當前branch的某次提交的文件checkout出來,如:
$ git checkout otherbranch~0 log.txt
~後的數字n表示對應branch的HEAD之前的第n次提交。