git回滾命令reset revert的區別

2022-05-29 11:06:09 字數 1528 閱讀 9582

##使用git,總有一天會遇到下面的問題:

(1)改完**匆忙提交,上線發現有問題,怎麼辦? 趕緊回滾。

(2)改完**測試也沒有問題,但是上線發現你的修改影響了之前執行正常的**報錯,必須回滾。

所以git的取消提交、回退甚至返回上一版本是比較重要的。

大致分為下面2種情況:

1、沒有push

這種情況發生在你的本地**倉庫,可能你add、commit以後發現**有點問題,準備取消提交,用reset

git reset \--soft | --mixed | --hard

引數說明:

--soft:保留原始碼,只回退commit資訊到某個版本,不涉及index的回退。如果還需要提交,直接commit即可。

--mixed:會保留原始碼,只是將git commit和index的資訊回退到了某個版本。(git reset預設的就是--mixed模式,即git reset等價於git reset --mixed)

--hard:原始碼也會回退到某個版本,commit和index都會回退到某個版本。(注意這種方式是會改變本地**倉庫原始碼)

當然有人在push**以後,也使用 reset --hard 回退**到某個版本之前。但是這樣會有乙個問題,你線上的**沒有變,線上commit、index都沒有變,當你把本地**修改完提交的時候你會發現全是衝突........所以,這種情況你要使用下面的方式

2、已經push

對於已經把**push到線上倉庫,你回退本地**其實也想同時回退線上**,回滾到某個指定的版本,讓線上、線下**保持一致,用revert。

git revert用於反轉提交,行evert命令時要求工作樹必須是乾淨的。

git revert用乙個新提交來消除乙個歷史提交所做的任何修改。

revert之後你的本地**會回滾到指定的歷史版本,這時你再git push就可以把線上的**更新。(這裡不會像reset造成衝突的問題)

revert的使用,需要先找到你想回滾版本唯一的commit標識**,可以用git log或者在adgit搭建的web環境歷史提交記錄裡檢視。

git revert c011eb3c20ba6fb38cc94fe5a8dda366a3990c61

通常,前幾位即可

git revert c011eb3

綜上,git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit。看似達到的效果是一樣的,其實完全不同:

1、上面我們說的如果你已經push到線上**庫,reset刪除指定commit以後,你git push可能導致一大堆衝突,但是revert 不會。

2、如果在日後現有分支和歷史分支需要合併的時候,reset恢復部分的**依然會出現在歷史分支裡,但是revert方向提交的commit並不會出現在歷史分支裡。

3、reset是在正常的commit歷史中,刪除了指定的commit,這時head是向後移動了。而revert是在正常的commit歷史中再commit一次,只不過是反向提交,它的head是一直向前的。

Git 回滾操作

git revert是用一次新的commit來回滾之前的commit,git reset是直接刪除指定的commit git log 查詢回滾版本唯一commit標識 git reset hard head 3 會將最新的3次提交全部重置,就像沒有提交過一樣。mixed git reset 會保留原...

git 回滾操作

情況一 檔案被修改了,但未執行git add操作 working tree內撤銷 git checkout filename git checkout 情況二 同時對多個檔案執行了git add操作,但本次只想提交其中一部分檔案 git add git status 取消暫存 git reset h...

git回滾操作

今天刪除日誌時不小心把控制器刪除掉了 心裡一荒 不過還好 phpstorm 上面的git 有rollback 操作 不過 既然是用git 那如果使用命令改怎麼操作呢 第一種情況 就像上面說的 誤刪了檔案 但是還沒有提交的暫存區 git add git checkout filename 如 git ...