前言
Git跟踪并管理的是修改,而非文件。
正文
回退工作区修改
git checkout -- file # 回退工作区的修改
举例:
工作区 暂存区 版本库
hello,git! hello,git! hello,git!
I do I do I do
add xxx add xxx add xxx
add yyy add yyy add yyy
I like I like I like
I love I love I love
hello hello hello
go go
gggg
总结:
命令git checkout – readme.txt 就是把readme.txt文件在工作区的修改全部撤销:
- 如果readme.txt自修改后还没有被放到暂存区,那么撤销修改就回到和版本库一模一样的状态;
- 如果readme.txt已经添加到暂存区后,又作了修改,那么撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。
回退暂存区修改
git reset HEAD file # 回退暂存区的修改到工作区
git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。
举例:
工作区 暂存区 版本库
hello,git! hello,git! hello,git!
I do I do I do
add xxx add xxx add xxx
add yyy add yyy add yyy
I like I like I like
I love I love I love
hello hello hello
go go
此时,暂存区已经回到上一次commit的状态,工作区撤销就使用git checkout – file。
回退暂存区和工作区
如果有错误git add到暂存区,想同时回退工作区和暂存区就用以下命令:
git reset --hard head #此时最近一次git add的内容在暂存区和工作区都没有了
【总结】
- 如果想直接丢弃工作区的修改时,用命令git checkout – file。
- 如果发现错误,但是已经提交到暂存区时,想丢弃修改,分两步,第一步用命令git reset HEAD ,就回到了1,第二步按1操作。
- 已经提交了不合适的修改到版本库,想要撤销本次提交,就用版本回退,不过前提是没有推送到远程库。
补充:
Unix/Linux 命令中,- 后一般跟短命令选项(通常是单字母,也有一些命令是例外的),-- 后一般跟长命令选项。如果只有一个单独的- -,后面不紧跟任何选项,则表示命令选项结束,后续的都作为命令的参数而不是选项。