如何将工作副本回退至旧提交?需彻底清除后续提交
彻底回退仓库到指定提交的正确操作
要彻底把仓库回退到提交 e4ea7bf73124968e2f68012f77837df2046fd6e5 并清除该提交之后的所有变更,其实有更直接的方式,我来帮你梳理正确步骤,顺便分析下你之前尝试的操作问题:
一、正确的本地回退步骤
如果你只是想在本地仓库回退到目标提交,执行以下命令即可:
git clone git@github.com:superflycss/utilities-layout.git cd utilities-layout # 硬重置到目标提交,彻底清除之后的所有提交和本地修改 git reset --hard e4ea7bf73124968e2f68012f77837df2046fd6e5
这里的 git reset --hard 会同时完成三个动作:将HEAD指针移到目标提交、覆盖暂存区内容、覆盖工作区文件,让你的仓库完全回到该提交的状态,之后的所有提交记录都会被清除。
二、如果已经推送到远程仓库
如果你之前已经把后续的错误提交推送到了远程仓库,需要强制推送本地的重置结果(⚠️ 注意:如果是多人协作的仓库,强制推送可能会覆盖其他协作者的提交,一定要确认没人在你要清除的提交上工作):
# 假设你的远程分支是main,根据实际分支名调整 git push origin main --force
三、分析你之前的操作问题
你之前执行的步骤其实绕了弯路,甚至没达到目标:
- 第一步
git reset e4ea7bf...默认是--mixed参数,这时候只是把HEAD指针移到了目标提交,但工作区的文件还是后续提交的状态; - 第二步
git reset --soft HEAD@{1}又把指针移回了之前的HEAD,相当于又回到了回退前的状态; - 最后提交的新commit只是创建了一个“假装回退”的提交,并没有真正清除后续的提交记录。
所以用 --hard 参数直接重置才是最直接的方式,一步到位就能达到你要的“彻底清除该提交之后所有提交”的效果。
内容的提问来源于stack exchange,提问作者Ole
相关产品推荐
相关产品推荐

