git reset --hard xxx/soft xxx,以及git revert的區(qū)別和作用

很多時候,git新手很容易誤操作,而git reset --hard xxx/soft xxx、git revert 都是用來撤銷代碼倉庫中的某些更改的,它們非常相似,在用的時候很容易混淆,下面比較一下它們的區(qū)別及作用。

Git倉庫有三個主要的組成,工作目錄、暫存區(qū)、提交歷史。

resert

如果修改了某些內容,但是還沒有push到遠程倉庫,可以用git reset去撤銷更改,除了在當前分支上操作,還可以通過傳入標記來修改緩存區(qū)或者工作目錄,這些標記限定了git reset的作用域,常常跟HEAD作為參數(shù)一起使用。
例如:

git resert HEAD^2

reset操作如下圖所示:


1.png
2.png
  • git reset --soft xxx:回退到某個版本,只退回了commit的信息,不會回復到index file一級。如果還要提交,直接commit即可。也就是說緩存區(qū)和工作目錄都不會改變,改變的是提交歷史。
  • git reset --hard xxx:徹底退回到某個版本,本都的源碼也會變?yōu)樯细鱾€版本的內容,也就是緩存區(qū)和工作目錄都同步到你指定的提交。
    如果你想完全舍棄你沒有提交的改動,可以使用git reset --hard HEAD。

revert

如果我們修改了某些內容,已經(jīng)commit到本地倉庫,并且push到遠程倉庫了,這種情況下想把本地和遠程倉庫都回退到某個版本,該怎么做呢?

前面講到的用git reset只是在本地倉庫中回退版本,而遠程倉庫的版本不會變化,這樣,及時本地reset了,但如果再git pull,那么,遠程倉庫的內容又會和本地之前版本的內容進行merge,這并不是我們想要的東西。

對于已經(jīng)把代碼push到遠程倉庫,你退回本地代碼其實也想同時退回線上代碼,回滾到某個指定的版本,線上線下代碼保持一致。git revert用于撤銷某次操作,此次操作之前和之后的commit和history都會保留,即用一個新提交來消除一個歷史提交所做的任何修改。

git revert HEAD 撤銷前一次commit
git revert HEAD^ 撤銷前前一次commit
git revert commit xxx 撤銷指定的版本,撤銷也會作為一次提交進行保存。

revert之后你的本地代碼會回滾到指定的歷史版本,然后再git push。

  • git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。
  • git reset是把HEAD向后移動了一下,而git revert是HEAD繼續(xù)前進,只是新的commit的內容跟要revert的內容正好相反,能夠抵消要被revert的內容。
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容