撤销修改
场景1:当你改乱了工作区某个文件的内容,想直接丢弃工作区的修改时
在git add
前:
git checkout -- file
可以丢弃工作区的修改:
$ git checkout -- readme.txt
命令git checkout -- readme.txt
意思就是,把readme.txt
文件在工作区的修改全部撤销,这里有两种情况:
- 一种是
readme.txt
自修改后还没有被git add
放到暂存区,现在,撤销修改就回到和版本库一模一样的状态; - 一种是
readme.txt
已经被git add
放到暂存区后,又在工作区作了修改,现在撤销修改就回到添加到暂存区后的状态。- 总之,就是让这个文件回到最近一次
git commit
或git add
时的状态。
- 总之,就是让这个文件回到最近一次
场景2:当你不但改乱了工作区某个文件的内容,还git add
到了暂存区时,想丢弃修改
在git add
后,分两步走:
- 第一步用命令
git reset HEAD <file>
,就回到了场景1 - 第二步按场景1操作。
1、用命令git reset HEAD <file>
可以把暂存区的修改撤销掉(unstage),重新放回工作区:
$ git reset HEAD readme.txt
2、此时再用git status
查看一下,现在暂存区是干净的,工作区有修改:
3、进入场景1,用git checkout -- file
丢弃工作区的修改。
场景3:已经提交了不合适的修改到版本库时,想要撤销本次提交,尝试版本回溯,前提:没有推送到远程库。
删除文件
删除工作区文件:一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm
命令删了:
$ rm test.txt
这个时候,Git知道你删除了文件,因此,工作区和版本库就不一致了,git status
命令会立刻告诉你哪些文件被删除了,其中标红了这么一条:
$ git status
deleted: test.txt
两种操作
1、绝情!彻底删除版本库的该文件
-
确实要从版本库中删除该文件,那就用命令
git rm
删掉,并且git commit
: -
$ git rm test.txt $ git commit -m "remove test.txt"
2、是误删!我要从版本库下载这个文件的最新版本
$ git checkout -- test.txt
注:只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。