- head:這是當(dāng)前分支版本頂端的別名,也就是在當(dāng)前分支你最近的一個提交
- index:index也被稱為staging area,是指一整套即將被下一個提交的文件集合。他也是將成為HEAD的父親的那個commit
- working copy:working copy代表你正在工作的那個文件集
- branch:branch是一個指向一個commit的指針
當(dāng)你第一次checkout一個分支,HEAD就指向當(dāng)前分支的最近一個commit。在HEAD中的文件集和在index中的文件集是相同的,在working copy的文件集和HEAD,INDEX中的文件集是完全相同的。所有三者(HEAD,INDEX(STAGING),WORKING COPY)都是相同的狀態(tài)。
git reset不會產(chǎn)生commit,它僅僅更新一個branch指向另外一個commit。
1.git reset --hard HEAD~1/2 意為將版本庫回退1/2個版本,但是不僅僅是將本地版本庫的頭指針全部重置到指定版本,也會重置暫存區(qū),并且會將工作區(qū)代碼也回退到這個版本 。
它將重置HEAD返回到另外一個commit(取決于~1/2的參數(shù)),重置index以便反映HEAD的變化,并且重置working copy也使得其完全匹配起來,數(shù)據(jù)可能丟失。
2.git reset --soft HEAD~1/2 意為將版本庫軟回退1/2個版本,所謂軟回退表示將本地版本庫的頭指針全部重置到指定版本,且將這次提交之后的所有變更都移動到暫存區(qū)。
soft參數(shù)告訴Git重置HEAD到另外一個commit,index,working copy都不會做任何變化。
3.git revert 撤銷 某次操作,此次操作之前和之后的commit和history都會保留,并且把這次撤銷作為一次最新的提交。
git revert 和 git reset的區(qū)別
- git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
- 在回滾這一操作上看,效果差不多。但是在日后繼續(xù)merge以前的老版本時有區(qū)別。因為git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時,導(dǎo)致這部分改變不會再次出現(xiàn),但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應(yīng)該還會被引入。
- git reset 是把HEAD向后移動了一下,而git revert是HEAD繼續(xù)前進(jìn),只是新的commit的內(nèi)容和要revert的內(nèi)容正好相反,能夠抵消要被revert的內(nèi)容。