Git版本回退之reset和revert使用詳解
Git版本回退之reset和revert
在開發(fā)過程中,可能會遇到過錯誤提交的情況。這種情況下,先不要著急,可以通過以下兩個命令來幫助你優(yōu)雅的實現(xiàn)版本回退。
git reset
假如現(xiàn)在有如下幾個提交:

其中:A 和 B 是正常提交,而 C 和 D 是錯誤提交?,F(xiàn)在想把 C 和 D 回退掉。而此時HEAD 指針指向 D 提交(5lk4er)。我們只需將 HEAD 指針移動到 B 提交(a0fvf8),即可。
這個時候就可以使用git reset 命令:
git reset --hard a0fvf8 // 將HEAD指針移動到B提交點 git push origin HEAD --force // 將提交強制推到遠(yuǎn)程倉庫
此時HEAD指針就會移動到 B 提交下:

采用這種方式回退代碼會使 HEAD 指針往回移動,從而會失去之后的提交信息且不可恢復(fù),所以要慎重使用。
git revert
git revert會創(chuàng)建一個新的版本,且HEAD指針會指向這個新生成的版本,原來錯誤提交信息也可以保留。
可以通過用git revert 命令逐個回退:
git revert 5lk4ergit revert 76sdeb

回退版本少的可以逐個回退,多的話就要批量回退了:
git revert OLDER_COMMIT^..NEWER_COMMIT
通過對比發(fā)現(xiàn),git reset 會失去后面的提交,而 git revert 是通過反做的方式重新創(chuàng)建一個新的提交,而保留原有的提交。所以應(yīng)盡量使用 git revert 命令來回退版本,慎重使用 git reset 命令。
補充
假如現(xiàn)在有三個提交,不巧的是那個錯誤的提交剛好位于中間

此時直接使用 git reset 命令將 HEAD 指針重置到 A 提交顯然是不行的,因為 C 提交是正確的,需要保留的。
正確的做法:先把 C 和 B 提交全部回退,再使用 cherry-pick 命令將 C 提交重新再生成一個新的提交 C’’,這樣就實現(xiàn)了將 B提交回退的需求。

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
有關(guān)將idea的系統(tǒng)配置文件移到其它盤激活失效的問題
這篇文章給大家介紹win7系統(tǒng)盤空間不足,發(fā)現(xiàn)idea2019.3 占3.4G,將idea的系統(tǒng)配置文件移到其它盤,激活失效的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-11-11
用Meta標(biāo)簽控制360瀏覽器默認(rèn)極速模式打開自己的網(wǎng)站
最近用360瀏覽器訪問自己的網(wǎng)站,發(fā)現(xiàn)都是被優(yōu)先選用兼容模式打開,這使得網(wǎng)站很難看。為了讓360瀏覽器打開網(wǎng)站的時候優(yōu)先使用極速模式,而非兼容模式,找了一下官方論壇,發(fā)現(xiàn)了解決方案。2016-07-07
Azkaban報錯-azkaban.executor.ExecutorManagerException: No acti
這篇文章主要介紹了Azkaban報錯-azkaban.executor.ExecutorManagerException: No active executors found,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-05-05
關(guān)于postman上傳文件執(zhí)行成功而使用collection runner執(zhí)行失敗的問題
這篇文章主要介紹了關(guān)于postman上傳文件執(zhí)行成功而使用collection runner執(zhí)行失敗的問題,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-12-12
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討...2007-03-03

