如何将本地git clone恢复至倒数第二次推送OM或7天前的历史状态
需求可行性说明
该需求完全可以实现。Git的所有本地历史查询、版本回退操作默认仅作用于当前本地克隆目录,只要你不主动执行强制推送命令,全程不会修改远程仓库的任何内容,也不会影响其他克隆副本。
具体操作步骤
按你需要的恢复场景选择对应操作即可:
场景1:恢复到7天前的历史状态
- 先查询7天前最近的提交哈希值,执行命令:
git log --before="7 days ago" --oneline -1
命令返回结果的第一串字符就是对应提交的哈希值,示例返回为a1b2c3d fix: 某某问题,则哈希值为a1b2c3d。 - 按需选择恢复方式:
- 仅临时查看该时间点的内容,后续还要回到当前最新进度:执行
git checkout 你查到的哈希值,此时进入分离头指针状态,不会修改你当前分支的提交记录。 - 直接将当前本地分支的内容回退到该时间点,丢弃该时间点之后的所有本地提交:执行
git reset --hard 你查到的哈希值。
场景2:恢复到倒数第二次推送至OM的状态
- 先查询历史推送记录,找到倒数第二次推送对应的提交哈希值,执行命令(请将命令中的
origin/master替换为你实际的远程仓库别名+推送分支名,OM如果是你配置的远程别名就替换为OM/master):git reflog show origin/master
返回结果中会按时间倒序展示所有远程分支的更新记录,其中带push标记的就是你执行过的推送操作,取倒数第二条对应的哈希值即可。 - 恢复方式和场景1的第二步一致,按需选择checkout或者reset --hard命令即可。
注意事项
- 执行
git reset --hard前建议先执行git branch backup_current将当前分支的最新进度备份到新的backup_current分支,避免误操作丢失需要的本地提交 - 操作全程不要执行
git push -f之类的强制推送命令,即可保证不会修改远程仓库的任何内容
内容的提问来源于stack exchange,提问作者daveg
相关产品推荐
相关产品推荐

