情形一:只是在本地对文件进行了修改,且本次修改还没有git add到暂存区。
- 可以手动地在本地修改之前更改后的文件,手动把文件恢复到上一个版本的状态。
- 可以使用
git checkout -- file
命令,来丢弃工作区的改动
假如我在README.md中写了下面的话:
下面的内容可能会导致自己丢饭碗
I have a stupid boss!
命令git checkout -- README.md
意思就是,把README.md文件在工作区的修改全部撤销,这里有两种情况:
一种是README.md自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
git checkout 没有 – 是切换分支的功能。
情形二:在假定是凌晨3点,你不但写了一些胡话,还git add到暂存区了,现在需要撤销在暂存区中的修改,同时丢弃工作区的修改。
分两步:
1.把暂存区的修改撤销掉(unstage),重新放回工作区**
git reset HEAD file
比如,我项目里有大量的图片数据,之前错误的使用了git add -A
指令,导致所有的图片都被git所管理了。这个时候,我可以使用git reset HEAD *.jpg
,这样图片就从暂存区中撤销了,不再被git所管理。
2.丢弃工作区的修改
git checkout -- file
比如我本地新建了一个Delete_stage_repository.txt文档,我git add
添加到暂存区,但是还没有commit
,这个时候我想清空暂存区的内容,就可以
使用git reset HEAD Delete_stage_repository.txt
。然后再使用git status
查看状态,显示以下信息:
位于分支 master
您的分支领先 'origin/master' 共 2 个提交。
(使用 "git push" 来发布您的本地提交)
未跟踪的文件:
(使用 "git add <文件>..." 以包含要提交的内容)
Delete_stage_repository.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)
说明新建Delete_stage_repository.txt文档这一修改已经在暂存区中被清空了