目录
本篇文章主要记录 git reset 及 git revert 的使用方法。
1. 撤销还没有推送到remote仓库的提交
撤销最新的本地提交,如下图所示,C时master分支上最新的提交,现在我们要撤销master分支上的提交C。
(F)
A-B-C
↑
master
C是HEAD(HEAD: 代表这当前分支上最新的commit提交。), F是文件的状态.
1.1 完全撤销-舍弃你的全部改动,销毁提交
当你新加了一些改动,并且添加这些改动,然后commit提交到本地,这时你发现的你的改动完全做错了,你想撤销这个提交,而且不需要保留之前的改动。
git reset --hard HEAD~
执行完reset命令后,执行 git status 命令来查看你branch状态,你可以发现你刚刚的提交消失了,并且之前的change改动也消失了,效果如下图所示。
(F)
A-B
↑
master
1.1.1 撤销提交后又想恢复刚刚销毁的提交
当你用git reset --hard HEAD~ 来撤销提交后,你销毁了你的提交,但假如这时你突然又想恢复刚刚销毁的提交,来看看之前做的改动。这时候你能恢复刚销毁的提交吗?答案是可以的!
恢复提交步骤:
1. 执行git reflog命令来查看你刚刚销毁提交的记录及其哈希值。
git reflog
2. 找到相对应的哈希值,执行git checkout -b someNewBranchName shaYouDestroyed命令,如上图我执行的命令:
git co -b fix/recover-commit-remove-before 7144f51
看,这时你恢复了这个提交,如上图所示,你可以在“fix/recover-commit-remove-before”分支上查看该提交。
1.2 撤销-但保留你的改动
当你做了一些改动,并且添加这些改动,然后commit提交到本地,这时你发现的你的改动有点小问题,你想撤销这个commit提交,而且要保留之前的改动,方便在之前的改动基础上做一些新的改动。
撤销方法步骤为:
git reset HEAD~
执行完reset命令后,再执行 git status 来查看你之前的那些改动,你会发现你之前的哪些改动都还在,效果如下图所示:
(F)
A-B-C
↑
master
1.3 最安全轻微的撤销
保留文件的改动及索引状态,撤销完成后将会到git添加改动的状态,实现方法为:
git reset --soft HEAD~
实现效果如下图所示:撤销完成,回到git添加改动后的状态。
2. 撤销已经推送到remote仓库的提交
撤销已经推送到远程仓库的提交,
(F)
A-B-C-D
↑
master
D是HEAD(是我们最新的提交,现在我们要撤销D到C), F是文件的状态.
2.1 利用git revert来撤销远程提交
git revert HEAD (恢复HEAD提交)
或者
git revert <commit_hash> (恢复对应哈希值的提交)
我们恢复分支上的状态到C,但是我有revert的提交记录,如下图所示:
(F)
A-B-C-D-E
↑
master
E是恢复D的提交改动,所以状态其实是跟C一样。
如果你不想有这个revert提交记录,这时你就需要整理你的branch提交了,具体操作步骤请看另外的博客:Git 笔记:将两个提交合并为一个
注意:撤销还原远程提交时需注意有没有人pull了你的提交,不然将引起额外的工作,亲测,哈哈!
reset 与 revert 操作还是挺重要的,多试几次,很快就能熟能生巧。
END~~~