送给git reset --hard 推送到远端的后悔药
本地通过git reset --hard commitId 将版本会退到很久之前的版本
并且执行了 git push origin HEAD --force 推到远端,想要撤销本次回退。
此时git log 只能看到回退后版本之前的提交
场景一的后悔药: 本地在回退之前进行过一次pull,代码是最新的
git reflog 查看本地操作记录
# git reflog
7d630936e (HEAD -> test, origin/test) HEAD@{0}: reset: moving to 7d630936e363c47a0e82cdbcd11f5cf1244f85ad 20a92df60 HEAD@{1}: reset: moving to HEAD 20a92df60 HEAD@{2}: reset: moving to HEAD
前面的7d630936e是提交id,可以通过再一次 git reset --hard 20a92df60 回退
场景二的后悔药:本地在push之前代码不是最新的,通过git log、git reflog 都只能看到最近一次,其他的看不到了
# git reflog remotes/origin/test 7d630936e (origin/test) remotes/origin/test@{0}: update by push c4d32bab6 remotes/origin/test@{1}: pull: fast-forward ed81ec0ae remotes/origin/test@{2}: pull: fast-forward 38fb5a355 remotes/origin/test@{3}: pull: fast-forward 62658da57 remotes/origin/test@{4}: pull: fast-forward 6b021b2ea remotes/origin/test@{5}: pull: fast-forward b3b769b0f remotes/origin/test@{6}: pull: fast-forward 39c523c0a remotes/origin/test@{7}: pull: fast-forward 85bd4b280 remotes/origin/test@{8}: pull: fast-forward 7d630936e (origin/test) remotes/origin/test@{9}: update by push
查看远端的操作日志,取最近一次正常提交commitId进行回退:git reset --hard c4d32bab6
之后推送到远端:git push HEAD --force