切换到旧提交,同时保证当前修改不丢失
在 Git 中,可以通过以下几种方式切换到之前的提交,同时保留当前的提交(即不丢失工作进度):
1. 使用 git checkout 创建临时分离头指针(推荐用于查看)
git checkout <commit-hash>
这会让你进入"分离头指针"状态,你可以查看旧代码。要返回最新提交:
git checkout <原来的分支名>
2. 使用 git branch 创建新分支(最安全)
git branch temp-branch <commit-hash> # 创建临时分支指向旧提交
git checkout temp-branch # 切换到临时分支
这样你的原分支和新提交都完好保存,可以在临时分支上操作。
3. 使用 git stash 暂存当前修改(修改未提交)
git stash # 保存当前工作
git checkout <commit-hash> # 切换到旧提交
# 查看或操作后...
git checkout - # 回到原分支
git stash pop # 恢复暂存的修改
4. 使用 git reset --soft(可逆操作)
如果想在当前分支"回退"到旧提交但保留所有更改在暂存区:
git reset --soft <commit-hash>
之后可以用 git reset ORIG_HEAD
撤销这次回退。
注意事项:
- 所有方法都不会丢弃提交,只要提交还在 reflog 中(默认保留90天)
- 要永久丢弃提交需要使用
git reset --hard
或git push -f
(慎用) - 推荐优先使用创建新分支的方式,这是最安全的选择
可以通过 git reflog
查看所有历史操作记录,找回"丢失"的提交。