Git版本回退之reset和revert使用詳解
Git版本回退之reset和revert
在開發(fā)過程中,可能會遇到過錯誤提交的情況。這種情況下,先不要著急,可以通過以下兩個(gè)命令來幫助你優(yōu)雅的實(shí)現(xiàn)版本回退。
git reset
假如現(xiàn)在有如下幾個(gè)提交:
其中:A 和 B 是正常提交,而 C 和 D 是錯誤提交?,F(xiàn)在想把 C 和 D 回退掉。而此時(shí)HEAD 指針指向 D 提交(5lk4er)。我們只需將 HEAD 指針移動到 B 提交(a0fvf8),即可。
這個(gè)時(shí)候就可以使用git reset
命令:
git reset --hard a0fvf8 // 將HEAD指針移動到B提交點(diǎn) git push origin HEAD --force // 將提交強(qiáng)制推到遠(yuǎn)程倉庫
此時(shí)HEAD指針就會移動到 B 提交下:
采用這種方式回退代碼會使 HEAD 指針往回移動,從而會失去之后的提交信息且不可恢復(fù),所以要慎重使用。
git revert
git revert會創(chuàng)建一個(gè)新的版本,且HEAD指針會指向這個(gè)新生成的版本,原來錯誤提交信息也可以保留。
可以通過用git revert
命令逐個(gè)回退:
git revert 5lk4ergit revert 76sdeb
回退版本少的可以逐個(gè)回退,多的話就要批量回退了:
git revert OLDER_COMMIT^..NEWER_COMMIT
通過對比發(fā)現(xiàn),git reset 會失去后面的提交,而 git revert 是通過反做的方式重新創(chuàng)建一個(gè)新的提交,而保留原有的提交。所以應(yīng)盡量使用 git revert 命令來回退版本,慎重使用 git reset 命令。
補(bǔ)充
假如現(xiàn)在有三個(gè)提交,不巧的是那個(gè)錯誤的提交剛好位于中間
此時(shí)直接使用 git reset 命令將 HEAD 指針重置到 A 提交顯然是不行的,因?yàn)?C 提交是正確的,需要保留的。
正確的做法:先把 C 和 B 提交全部回退,再使用 cherry-pick
命令將 C 提交重新再生成一個(gè)新的提交 C’’,這樣就實(shí)現(xiàn)了將 B提交回退的需求。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
有關(guān)將idea的系統(tǒng)配置文件移到其它盤激活失效的問題
這篇文章給大家介紹win7系統(tǒng)盤空間不足,發(fā)現(xiàn)idea2019.3 占3.4G,將idea的系統(tǒng)配置文件移到其它盤,激活失效的解決方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-11-11用Meta標(biāo)簽控制360瀏覽器默認(rèn)極速模式打開自己的網(wǎng)站
最近用360瀏覽器訪問自己的網(wǎng)站,發(fā)現(xiàn)都是被優(yōu)先選用兼容模式打開,這使得網(wǎng)站很難看。為了讓360瀏覽器打開網(wǎng)站的時(shí)候優(yōu)先使用極速模式,而非兼容模式,找了一下官方論壇,發(fā)現(xiàn)了解決方案。2016-07-07Azkaban報(bào)錯-azkaban.executor.ExecutorManagerException: No acti
這篇文章主要介紹了Azkaban報(bào)錯-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í)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討
ASP,PHP與.NET偽造HTTP-REFERER方法及防止偽造REFERER方法探討...2007-03-03