如何在Git中移除指定提交 仅保留特定历史提交
Git回退操作步骤
操作前建议先给当前分支打个备份标签,避免操作失误丢失提交:git tag backup_before_rebase,确认操作结果无误后再删除标签即可。如果当前工作区有未提交的修改,先执行git stash暂存,避免数据丢失。
第一步:执行交互式变基筛选提交
你需要保留的3个提交中,346d27是33f71c的父提交,会默认保留,我们只需要筛选33f71c及之后的提交即可,执行命令:
git rebase -i 33f71c^
执行后会弹出文本编辑界面,所有33f71c之后的提交会按从旧到新的顺序排列,每行开头默认是pick,按以下规则修改:
- 33f71c对应的行保持
pick不动 - 221e689对应的行保持
pick不动 - 其余所有提交对应的行直接整行删除
保存退出编辑界面后,Git会自动完成变基操作,操作完成后执行git log --oneline确认提交记录是否符合预期。
第二步:同步到远程仓库(仅需要修改远程分支时执行)
注意:该操作会覆盖远程分支的提交历史,多人协作场景下操作前需通知所有协作者
执行强制推送命令即可:
# 替换mybranch为你实际操作的分支名,比如master git push origin mybranch --force
操作失误回滚方法
如果操作后发现结果不符合预期,可执行git reflog查看操作前的HEAD哈希值,执行以下命令回滚到操作前的状态:
# 替换<旧HEAD哈希>为你在reflog中查到的操作前对应哈希 git reset --hard <旧HEAD哈希>
内容的提问来源于stack exchange,提问作者navin
相关产品推荐
相关产品推荐

