Git 將代碼恢復到一個歷史的版本
要把代碼回到某個歷史版本 比如 test有兩種方法
暴力的方式
如果你的倉庫是自己在用(不影響別人),那么你可以使用 git reset --hard <target_commit_id>
來恢復到指定的提交,再用 git push -f
來強制更新遠程的分支指針。為了保證萬一需要找回歷史提交,我們可以先打一個 tag 來備份。
對於剛剛的例子,需要執行的命令就是:
// 備份當前的分支到 backup_commit
git tag backup_commit
git push origin backup_commit
// 重置 source 分支
git reset --hard 23801b2
// 強制 push 更新遠程分支
git push origin source -f |
溫和的方式
如果你的倉庫是多人在協作,那么你這么操作會使用別人本地的代碼庫混亂,所以只能建一個新的提交,這個新的提交中把想取消的提交都 revert 掉,那么具體應該如何做呢?方法如下:
首先,和剛剛一樣,用 git reset --hard 23801b2
將代碼切換到目標提交的 id。接下來,用 git reset --soft origin/source
命令(source 分支),將當前代碼切換回最新的提交。
執行完上面兩步后,你的倉庫還是最新的提交,但是工作區變成了歷史的提交內容,這個時候用 git add
和 git commit
即可。
該方法需要保證 reset 的時候沒有別人做新的提交,如果有的話,會一並把別人的提交也撤銷了。所以還是挺危險的,慎用。