如何理解git checkout -- file和git reset HEAD -- file

http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374831943254ee90db11b13d4ba9a73b9047f4fb968d000git



首先須要知道工做區(working diretory)和暫存區(Stage)這兩個概念。工做區的概念不只包含你實際更改的文件還應當包括當前修改但未add存入暫存區的文件變化信息,暫存區的做用則是臨時存儲文件的變化信息,在git add file操做以後,暫存區中將記錄file文件上的修改信息。暫存區的存在更細化了時間節點,要知道commit的每每是有重大改變的版本或者是在一次修改工做總體完成以後才使用commit。而在這之間須要保存的修改,天然須要一個緩存區暫時存放。
廖雪峯的git教程中在「撤銷修改」部分中,提到了幾種情景和相應的git checkout與git reset命令。經過個人思考,在這個更直接地分析這兩個命令的含義。
  git checkout -- file;撤銷對工做區修改;這個命令是以最新的存儲時間節點(add和commit)爲參照,覆蓋工做區對應文件file;這個命令改變的是工做區
  git reset HEAD -- file;清空add命令向暫存區提交的關於file文件的修改(Ustage);這個命令僅改變暫存區,並不改變工做區,這意味着在無任何其餘操做的狀況下,工做區中的實際文件同該命令運行以前無任何改變
對照廖雪峯的git教程中相應的例子,能更好地體會上述總結。緩存

相關文章
相關標籤/搜索