如何安全恢复Git仓库至旧提交并返回最新状态?
正确且安全的操作步骤
完全不需要修改master分支的历史,按以下步骤操作即可:
- 确保当前处于
master分支且为最新状态(如果本地没同步远程,先执行git pull origin master) - 切换到目标旧提交的分离HEAD状态,此时工作区会恢复到该提交的内容:
git switch --detach <你的旧提交哈希/名称> # 或者用旧命令:git checkout <你的旧提交哈希/名称> - 基于这个状态创建新分支:
git switch -c <新分支名称> # 或者旧命令:git checkout -b <新分支名称> - 在新分支上正常做修改、提交即可:
git add . git commit -m "基于旧提交的修改内容" - 回到
master分支,此时master依然保持最新状态,无需额外恢复:git switch master
为什么你考虑的两个方案不合适?
git revert <mycommit_name>:这个命令会在当前分支(比如master)生成一个新提交,用来撤销指定提交的修改。这会改变master的提交历史,之后你还要再做一次revert才能恢复到原最新状态,完全多此一举,不符合你「返回master并恢复至最新状态」的需求。git reset --soft <mycommit_name>:--soft参数只会移动分支指针到旧提交,但工作区和暂存区还是原最新状态,根本没让你回到旧提交的工作环境。而且如果master是和远程同步的分支,修改分支指针后再push会引发冲突,因为你改写了公共历史,非常不安全。
内容的提问来源于stack exchange,提问作者lm.
相关产品推荐
相关产品推荐

