這三大部分中:
working tree:就是你所工作在的目錄,每當你在代碼中進行了修改,working tree的狀態就改變了。
index file:是索引文件,它是連接working tree和commit的橋樑,每當我們使用git-add命令來登記後,index file的內容就改變了,此時index file就和working tree同步了。
commit:是最後的階段,只有commit了,我們的代碼才真正進入了git倉庫。我們使用git-commit就是將index file裏的內容提交到commit中。
git diff:是查看working tree與index file的差別的。
git diff --cached:是查看index file與commit的差別的。
git diff HEAD:是查看working tree和commit的差別的。(你一定沒有忘記,HEAD代表的是最近的一次commit的信息)
補充“回退”操作:
未add之前:
git checkout .
add .之後:
git reset --hard //回滾到最近一次的代碼,到未add.狀態,回覆代碼爲原來狀態
git reset --mixed 回到add狀態 == --hard
git reset HEAD
commit之後
git reset --soft HEAD^ //回滾最近一次的commit,到add.狀態
git reset --soft HEAD~3 //回滾最近三次的commit
push之後
git revert commitNum
git reset --hard commitNum //回滾到該commitNum處
git reset的幾種mode:
--hard:重設index和working
directory,自從<commit>以來在working directory中的任何改變都被丟棄,並把HEAD指向<commit>。
--soft:index和working
directory中的內容不作任何改變,僅僅把HEAD指向<commit>。這個模式的效果是,執行完畢後,自從<commit>以來的所有改變都會顯示在git status的"Changes to be committed"中。
--mixed:僅reset
index,但是不reset working directory。這個模式是默認模式,即當不顯示告知git reset模式時,會使用mixed模式。這個模式的效果是,working directory中文件的修改都會被保留,不會丟棄,但是也不會被標記成"Changes to be committed",但是會打出什麼還未被更新的報告。
--merge和--keep: 保留working
tree並丟棄一些之前的commit 。
參考:
http://blog.csdn.net/hudashi/article/details/7664464
(伯樂在線插播推薦幾篇文章:《Git
兩分鐘指南》、《寫給
Git 初學者的 7 個建議》、《圖解
Git /圖形化的 Git 參考手冊》、《給
Git 中級用戶的 25 個小貼士》、《讓Git
水平更上一層樓的 10 個小貼士》。)