在開發過程中,git的版本管理越來越普及。在版本管理中,最常用和最重要的是重置提交的版本,恢復后悔做了的事。大家都知道用reset命令。但是有幾種形態需要整理共享一下,也方便我自己查閱。
一、首先解析以下這三個相關的狀態和概念,
1、HEAD:可以描述為當前分支最后一個提交。即本地的信息中的當前版本。
2、Index:在工作副本修改之后執行過git add操作的版本文件,可以commit了的。
3、Working Copy:工作副本是你正在修改,但是沒有執行任何git操作的文件。
總的來說,
代碼修改,還沒做任何操作的時候就是 Working Copy,
git add * 操作之后就是Index,
git commit 之后就是HEAD。如果代碼修改了之后進行git add 操作,然后git commit,那么所有三者(HEAD,INDEX(STAGING),WORKING COPY)都是相同的狀態,內容相同。
二、reset
- soft(更改HEAD)(恢復git commit的操作)
軟重置。本來origin的HEAD和本地的HEAD一樣,如果你指定--soft參數,Git只是單純的把本地HEAD更改到你指定的版本那么,整個過程中,就HEAD的定義發生了變化,其他像Working Copy 和Index都沒有變化。該參數用於git commit后,又要恢復還沒commit的場景,重新審查代碼,然后再推上去。
2.hard(更改三者)
--hard參數將會將會重置(HEAD,INDEX(STAGING),WORKING COPY),強制一致。該參數用於在把工作副本改成一塌糊塗的時候,包括工作副本,一股腦恢復。有些就單純修改文件,其中有些git add了,有些git commit了,通通不管,可以一個命令恢復。
3.mixed(default)(恢復git add的操作,包含恢復git commit的操作)
--mixed是reset的默認參數,也就是當你不指定任何參數時的參數。它將重置HEAD到另外一個commit,並且重置index以便和HEAD相匹配。
三、記憶方法
工作流中先是本地修改,然后git add,然后gitcommit。以本地修改為最高量級,以自己為中心。該參數用於你在本地改了文件一部分commit了,一部分剛好git add了,這時候你要恢復到你的工作副本狀態,要求再次審查代碼。
1、soft: 重置git commit
2、mixed: 重置git commit 和 git add
3、hard: 重置git commit 和 git add 和工作副本的修改。
