咱們知道Git有三大區(工做區、暫存區、版本庫)以及幾個狀態(untracked、unstaged、uncommited)git
git reset命令是git中重置命令,即用來撤銷某次提交(commit)。首先,咱們得了解,git reset能夠幫咱們重置哪些內容:指針
一、修改本地倉庫中commit對象(快照)日誌
以下圖:對象
此時本地倉庫對應的是commit4,git reset 可讓本地倉庫對應的指針變爲commit3或是commit1等以前的版本,固然,也能夠變爲commit4以後的某個commit,如commit5。
Git 的分支,其實本質上僅僅是指向提交對象的可變指針。
備註:當使用git reset命令時候,通常會修改本地倉庫。blog
其經常使用格式以下:it
參數說明 (git log和git reflog可查看commitId,commitId是快照的惟一標識)im
--hard commitId 修改本地倉庫、暫存區、工做區裏面的數據爲commitId對應快照的內數據d3
--mixed commitId 修改本地倉庫、暫存區裏面的數據爲commitId對應快照裏的數據,是git reset默認的參數,--mixed可缺省。 暫存區的數據會被快照中的數據覆蓋數據
這種狀況是工做區沒有,但暫存區有,因此提示修改未在暫存區(D表示delete)db
--soft commitId 修改本地倉庫裏面的數據爲commitId對應快照的數據。(僅改變指向快照的指針指向)
參數說明
咱們須要注意,使用git reset重置通常是很危險的,會完全地丟掉歷史。由於若是沒有記錄下重置前的commitId,通常不容易找回,除非分析.git/logs裏面的日誌,故重置需慎重。
git diff只對已被追蹤的文件起做用,即已git add過,在暫存區有的
git commit -a -m只對已被追蹤的文件起做用,