本文介绍几种常用的 Git 撤销的操作。
撤销提交
提交代码之后,意识到该提交有问题,想要撤回这个提交:
git revert HEAD |
git revert
命令的原理是再 新增一次提交 ,撤销掉上一次提交的所有变化,这种方式是在历史基础上进行修订,不会丢失代码。
git revert
命令只能抵消上一次提交,如果想要抵消多个提交,可以这样写:
git revert <commit1> <commit2> |
之前提交信息的记录可以用 git log
查看。
git revert
常用的参数:
--no-edit
: 不打开默认编辑器编辑提交信息,使用默认提交信息--no-commit
: 不产生新的提交,只是撤销缓存区和工作区的变化
修正上一次提交
提交代码之后,发现提交信息写错了,可以用如下命令修改上一次提交的修改信息:
git commit --amend -m "new message" |
--amend
的原理是产生一次新的提交覆盖上一次的提交对象。
值得注意的是,如果再次提交期间缓存区有文件变化,那么也会一起提交到仓库,不仅仅是更改提交信息,所以这种方式在一定程度上可以取代撤销操作。
从缓存区撤销文件
如果不小心将文件添加到了缓存区,那么可以使用如下命令撤销:
git rm --cached <filename> |
撤销工作区的文件修改
如果工作区的的文件已经修改了,但是没有提交,可以用 git checkout
找回本次修改之前的文件:
git checkout -- <filename> |
git checkout
的原理是现在缓存区里找,如果缓存区里有缓存的版本,则恢复该版本,否则恢复上一次提交的版本,工作区的文件修改一旦被撤销,就无法再找回了,也就是说这个撤销是不可逆的。
丢弃某个提交点之后的所有提交
如果希望最新的提交记录回到提交历史中的某一个时间点,这个时间点之后的所有提交都被丢弃,那么可以使用如下命令:
git reset <commit> |
默认情况下 git reset
只会修改缓存区,而不会修改工作区,如果想要工作区也回滚到以前的状态,那么需要使用 --hard
参数:
git reset --hard <commit> |
撤销当前分支的提交
如果已经在某一个分支上做了多次提交,发现提交错了分支,应该提交到另一个分支上,那么可以通过以下操作修正:
# 首先创建一个新的分支用来接收新的提交,但此时并没有切换到新的分支 |