git reset hard/soft以及git revert的區別

  • head:這是當前分支版本頂端的別名,也就是在當前分支你最近的一個提交
  • index:index也被稱為staging area,是指一整套即將被下一個提交的文件集合。他也是將成為HEAD的父親的那個commit
  • working copy:working copy代表你正在工作的那個文件集
  • branch:branch是一個指向一個commit的指針

當你第一次checkout一個分支,HEAD就指向當前分支的最近一個commit。在HEAD中的文件集和在index中的文件集是相同的,在working copy的文件集和HEAD,INDEX中的文件集是完全相同的。所有三者(HEAD,INDEX(STAGING),WORKING COPY)都是相同的狀態。

git reset不會產生commit,它僅僅更新一個branch指向另外一個commit。
1.git reset --hard HEAD~1/2 意為將版本庫回退1/2個版本,但是不僅僅是將本地版本庫的頭指針全部重置到指定版本,也會重置暫存區,并且會將工作區代碼也回退到這個版本 。
它將重置HEAD返回到另外一個commit(取決于~1/2的參數),重置index以便反映HEAD的變化,并且重置working copy也使得其完全匹配起來,數據可能丟失。

2.git reset --soft HEAD~1/2 意為將版本庫軟回退1/2個版本,所謂軟回退表示將本地版本庫的頭指針全部重置到指定版本,且將這次提交之后的所有變更都移動到暫存區。
soft參數告訴Git重置HEAD到另外一個commit,index,working copy都不會做任何變化。

3.git revert 撤銷 某次操作,此次操作之前和之后的commit和history都會保留,并且把這次撤銷作為一次最新的提交。

git revert 和 git reset的區別

  1. git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
  2. 在回滾這一操作上看,效果差不多。但是在日后繼續merge以前的老版本時有區別。因為git revert是用一次逆向的commit“中和”之前的提交,因此日后合并老的branch時,導致這部分改變不會再次出現,但是git reset是之間把某些commit在某個branch上刪除,因而和老的branch再次merge時,這些被回滾的commit應該還會被引入。
  3. git reset 是把HEAD向后移動了一下,而git revert是HEAD繼續前進,只是新的commit的內容和要revert的內容正好相反,能夠抵消要被revert的內容。
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容