问题描述:
在 A
状态 commit 后,又进行了一些编辑,这些编辑并不想全部保存 commit 上去。这个状态叫 C。后来一不小心,把 C
状态 commit 了,工作区的内容被提交至暂存区,状态变为 B
commit 了。现在要撤消 commit C => B 这个动作,并使文件恢复成 C 状态。
预热:
本文将使用到的命令:(看完再尝试)
命令 | 用途 | 示例 |
---|---|---|
git log | 查看历史 commit | |
git reflog | 查看最近操作 | 一般会有 HEAD@{N } 表示第几步操作,逆序 |
git reset | 重置当前空间 | git reset commitHash 回撤至 commitHash 次提交结果 |
本文相关概念:
概念 | 解释 |
---|---|
工作区 | 编辑文件、写代码的“地方”,修改过的代码放在此处 |
暂存区 | commit 后放置的地方,保存修改,等待提交 |
解决方案:
git log
查看目前所有提交。找到 commitA
与 commitB
的 hash 值。
git reset –hard commitB_hash
将工作区,暂存区强制恢复成 commitB
的状态
git reset commitA_hash
恢复 commitA
状态的源码。
此时由于 工作区存放的是 commitB
的代码,而暂存区存放的是 commitA
的代码。由 A –> B 的状态就是错误提交前的编辑状态。