git reset和 git revert比較

git reset和git revert區(qū)別與作用

一、先介紹幾個(gè)名詞:

1.working copy工作區(qū)

working copy(工作區(qū))你正在工作的那個(gè)文件集

2.Index

index也被稱為staging area(暫存區(qū)),指一整套即將被下一個(gè)提交的文件集合。

3. HEAD

這是當(dāng)前分支版本頂端的別名,也就是版本庫(kù)中最近的一個(gè)提交。

HEAD^=HEAD~1代表版本庫(kù)中的上一次提交,即最近一次提交的父提交

HEAD^^ =HEAD~2代表HEAD^的父提交

……

下圖是工作區(qū)、暫存區(qū)與HEAD簡(jiǎn)單的原理圖:

屏幕捕獲_2018_05_26_19_50_15_262.png

當(dāng)執(zhí)行一個(gè)git add,提交的內(nèi)容就暫存在index中,現(xiàn)在你的working copy和index內(nèi)容是相同的,但是他們和HEAD區(qū)不同。

當(dāng)執(zhí)行一個(gè)git commit,就創(chuàng)建一個(gè)新的commit將內(nèi)容提交到master,隨后HEAD就指向這個(gè)新的commit,而index,working copy和HEAD就匹配相同了。

二、Git Reset

此命令就是重置HEAD(當(dāng)前分支的版本頂端)到另外一個(gè)commit處。

1.git reset HEAD

任何事情都不會(huì)發(fā)生,HEAD就是當(dāng)前提交所在的位置。

2.git reset HEAD~1

HEAD從頂端移動(dòng)到前一個(gè)提交處

3.git reset HEAD~2

HEAD從頂端往下移動(dòng)兩次到倒數(shù)第三個(gè)提交處

4.git reset --soft xxx與git reset --hard xxx的區(qū)別

--soft參數(shù)讓Git重置HEAD到另外一個(gè)提交處,但也到此為止。此時(shí)暫存區(qū),工作區(qū)都不會(huì)做任何變化。

--hard參數(shù)它將重置HEAD返回到另外一個(gè)提交處,重置index以便反映HEAD的變化,并且重置working copy也使得其完全匹配起來(lái)。

如下兩圖,在--soft執(zhí)行后,HEAD指向的commit變成上一次commit,但工作區(qū)ls前后的文件沒(méi)有變化。而執(zhí)行g(shù)it reset --hard HEAD后,HEAD指向當(dāng)前commit f4cef,同時(shí)working copy工作區(qū)的d.md文件沒(méi)了。[圖片上傳失敗...(image-d1fb66-1527335571902)]

屏幕捕獲_2018_05_26_18_58_46_837.png
屏幕捕獲_2018_05_26_19_03_06_226.png

三、Git reset和Git revert區(qū)別與作用

reset是回朔到指定的commit版本(指定commit版本之后的操作都消失了)。revert是刪除指定的commit,此次操作之前和之后的commit和history都會(huì)保留,并且把這次撤銷作為一次最新的提交。

Git reset --hard與git revert比較如下:

1.有四次提交分別提交了4個(gè)文件 a.md , b.md, c.md, d.md.當(dāng)前提交b3e2

屏幕捕獲_2018_05_26_16_58_59_676.png

git reset --hard HEAD^返回上次提交

執(zhí)行后,HEAD回到f4cefc2這一版。ls當(dāng)前目錄只有 a.md , b.md, c.md。而d.md 沒(méi)了,commit歷史中,b3e234這一版被抹去了。

屏幕捕獲_2018_05_26_16_59_11_75.png

2.提交了4個(gè)文件 a.md , b.md, c.md, d.md.

屏幕捕獲_2018_05_26_17_14_25_943.png

Git revert HEAD^

如下圖,上次提交的文件c.md消失,ls中剩下a.md , b.md, d.md.

但是上次提交的commit4862f版本沒(méi)有消失,此命令生成了一個(gè)新的commit59f37。

屏幕捕獲_2018_05_26_17_14_40_897.png

所以,修復(fù)一些錯(cuò)誤,可視情況來(lái)使用以上命令:

1.修復(fù)未提交文件中的錯(cuò)誤(重置), 讓工作目錄回到上次提交時(shí)的狀態(tài)
$ git reset --hard HEAD
2.修復(fù)已提交文件中的錯(cuò)誤
$ git revert HEAD

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容