如何把最后一次commit
撤销回Changes not staged
和Untracked files
区别呢?
有3种情况:
(1)把最后的commit
切回Changes to be committed状态,使用命令:
git reset --soft HEAD^
(2)把最后的commit
切回Changes not staged for commit状态,使用命令:
git reset HEAD^
(3)把Changes to be committed状态切回Changes not staged for commit状态,使用命令:
git reset HEAD <file>...
最后一条命令在git命令行也有提示,不需要记住。
在 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 的状态就是错误提交前的编辑状态。
git 回滚到之前某一commit
git log
git reset –hard 8ff24a6803173208f3e606e32dfcf82db9ac84d8
获取完整commit id(如:14123c8877e6ebdc220e205d92fc70feaf06dab1)
git rev-parse HEAD1
获取short commit id(如:14123c8)
git rev-parse --short HEAD
如对本文有疑问,请提交到交流论坛,广大热心网友会为你解答!! 点击进入论坛