git add . 暫存區的目錄樹會更新,同時將工作區修改或新增的內容寫到了對象庫一個新對象,該對象的ID被記錄在暫存區的文件索引中,工作區後續的add 和 暫存區後續的commitf都更新到這個id對應的對象中
git commit 暫存區的目錄樹寫入對象庫,head指向新的暫存區的那個目錄樹。(簡單理解:將暫存區的內容更新到對象庫中,並且會備份一個該對象,用HEAD指向這個備份)
git checkout -- 文件名 撤銷工作區中文件尚未提交的修改。 實質:只是將暫存區的內容覆蓋到了工作區。
git rm --cached 文件名 會將暫存區的指定文件刪除,工作區不受影響
git reset HEAD 會將HEAD指向的備份全部重寫到暫存區,工作區不受影響
git checkout HEAD . 或 git checkout HEAD 文件名 會HEAD的覆蓋到工作區和暫存區。所以工作區沒有commit內容會被清除
-------對比
git diff 用於工作區與暫存區的比較
git diff HEAD 或 git diff master 用於工作區與 HEAD比較
git diff --cached 或 git diff --cached HEAD 用於與暫存區與HEAD比較
-----重置 HEAD遊標的控制
git reset HEAD^ 將HEAD指向的目錄樹恢復到暫存區,工作區不影響
git reset --soft HEAD^ 工作區和暫存區不改變,但是引用向前回退一次。 可以實現多次提交合併爲一次提交
git reset --hard HEAD^ 或 git reset --hard 9e8a761 將遊標指向上次提交或任意一次提交,同時工作區也會跟着被覆蓋
重置後,重置後的版本之後的版本id就不能在提交歷史中看到,
可以git reflog 查看版本的變化,查到重置版本後的版本號
git reset -- filename 或 git reset 僅將全部文件或指定文件撤出暫存區,相當於 git add 的反向操作
-----取消跟蹤並保存文件在本地
git rm --cached readme1.txt 刪除readme1.txt的跟蹤,並保留在本地。
git rm --cached xxDir 刪除xxDir的跟蹤,並保留在本地。
使用該命令後,.gitignore文件中被配置的路徑纔會生效