一、git rm/checkout
当未在.gitignore
文件中设置不需要跟踪的文件类型时,在使用git add .
命令时,会把工程中所有未跟踪的文件添加到git索引中,如果此时意识到有些文件不需要commit时,可以把文件从索引中删除:
git rm --cached + 文件名
或者
git reset HEAD + 文件名
在索引中删除后,该文件在工作目录中依然存在。
注意:
1. 在未执行git commit
前,若直接使用git rm + 文件名
,则同时会把文件从索引和工作目录中删除,且工作目录中的文件无法恢复。
2. 在执行git commit
后,若直接使用git rm + 文件名
,虽然同时会把文件从索引和工作目录中删除,但是工作目录中的文件可以被恢复,可通过如下命令:
git checkout HEAD -- + 文件名
二、git reset
该命令的作用为修改
git本地提交历史
。
git reset选项的影响:
选项 | HEAD | 索引 | 工作目录 |
---|---|---|---|
–soft | 是 | 否 | 否 |
–mixed | 是 | 是 | 否 |
–hard | 是 | 是 | 是 |
注:缺省时默认选项为–mixed。
例如:提交历史为A—>B,在本地修改代码后commit提交,则提交历史变为A—>B—>C,此时发现修改的代码有误,但是又改动了很多地方,不想一 一找了,此时有一个简单的方法把提交历史退回到B,使用如下命令即可:
git reset --hard B
此时,HEAD指针,索引,工作目录中的文件状态都会变成提交B时的状态,提交C的所有状态完全丢失。