标簽(linux): git
checkout一個檔案和帶檔案路徑git reset非常像,除了它更改的是工作目錄而不是緩存區。不像送出層面的checkout指令,它不會移動HEAD引用,也就是你不會切換到别的分支上去
如果你緩存并且送出了checkout的檔案,它具備将某個檔案回撤到之前版本的效果。注意它撤銷了這個檔案後面所有的更改,而git revert指令隻撤銷某個特定送出的更改

--soft 緩存區和工作目錄都不會被改變
--mixed 預設選項。緩存區和你指定的送出同步,但工作目錄不受影響
--hard 緩存區和工作目錄都同步到你指定的送出
雖然在調用時加上 --hard選項可以令git reset成為一個危險的指令(譯注:可能導緻工作目錄中所有目前進度丢失!),但本例中工作目錄内的檔案并不會被修改。不加選項地調用git reset并不危險——它隻會修改暫存區域
執行指令後:
當檢測到檔案路徑時,git reset将緩存區同步到你指定的那個送出。比如,下面這個指令會将倒數第二個送出中的foo.py加入到緩存區中,供下一個送出使用。
git reset HEAD~2 foo.py
運作git reset HEAD foo.py 會将目前的foo.py從緩存區中移除出去,而不會影響工作目錄中對foo.py的更改
--soft、 --mixed和--hard對檔案層面的git reset毫無作用,因為緩存區中的檔案一定會變化,而工作目錄中的檔案一定不變。
git reflog指令分析你所有分支的頭指針的日志來查找出你在重寫曆史上可能丢失的送出
指令
作用域
常用情景
git reset
送出層面
版本復原,,在私有分支上舍棄一些沒有送出的更改
檔案層面
将檔案從緩存區中移除
git checkout
切換分支或檢視舊版本
舍棄工作目錄中的更改
git revert
在公共分支上復原更改
(沒有)