如何回退到之前的某个提交
回退到历史提交:本地未推送用 git reset --hard <提交哈希>(彻底回到该点);已推送用 git revert 逐个反向提交保持历史不改写。只想看看旧代码用 git checkout <哈希>(游离 HEAD)。
看是否已推送:未推送的本地分支直接 git reset --hard <提交哈希> 回到该点(之后的提交从分支上消失);已推送的用 git revert 生成反向提交,历史前进式回退,协作者无感。
方式一:reset 回退(未推送)
git log --oneline # 找到目标提交
git reset --hard a1b2c3d # 回到它,之后的提交丢弃
# 想保留之后提交的改动(变成未提交状态):
git reset --soft a1b2c3d
方式二:revert 回退(已推送)
git revert a1b2c3d..HEAD # 把从该提交之后的所有提交逐个反向
git push
历史不被改写,团队协作安全。
方式三:只是看看(不改动分支)
git checkout a1b2c3d # 游离 HEAD,看旧代码/跑旧版本
git switch - # 回到之前的分支
找回 reset 掉的内容
git reflog # 找到回退前的提交哈希
git reset --hard <哈希> # 原地复活
常见问题(FAQ)
Q:回退后 push 被拒?
reset 改写了已推送的历史,需要 --force-with-lease。共享分支先沟通。
Q:只想回退某个文件而不是整个仓库?
git restore --source=a1b2c3d -- 路径,其他文件不动。
Q:回退到一半发现目标选错了?
git reflog 记录了 HEAD 的每一次移动,在记录和对象仍保留时,可用于定位此前的提交位置。