1. 程式人生 > >如何理解git checkout -- file和git reset HEAD -- file

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

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


首先需要知道工作區(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教程中相應的例子,能更好地體會上述總結。