工作学习中最近经常使用git,本地修改的很多无用的东西,并不想提交,也不想保留这些修改,所以整理下一下删除本地修改的命令。
可根据当前代码缓存、提交的状态来进行不同的操作。
1、未使用git add缓存代码
- 使用git checkout -- filename,注意中间有‘--’
git checkout -- filename
- 放弃所有文件的修改 git checkout,此命令用于放弃掉所有未加入缓存区(没有使用git add)的修改:对文件的修改操作和对文件执行的删除操作
git chekout .
注:此命令不会删除新建的文件,因为新建的文件还没加入git管理系统中,没有track,所以对git来说它是未知的,只需手动删除即可
若要通过命令删除新增的文件,可使用 git clean 相关命令(酌情使用),下边列举git clean相关命令
1.显示要删除的文件(注:如果有新增的文件夹,不会显示这个文件夹及此文件夹下的文件)
git clean -n
2.删除当前目录下所有未track过的文件(注:不会删除.gitignore文件里面指定的文件夹和文件,不管这些文件有没有被track过)
git clean -f
3.删除指定路径下的没有被track过的文件
git clean -f <path>
4.删除当前目录下没有被track过的文件和文件夹
git clean -df
5.删除当前目录下所有未track过的文件
git clean -xdf
其中-f表示文件,-d表示目录,如果还要删除.gitignore中的文件那么就再加上-x
git clean对于刚编译过的项目非常有用,它能轻易删除掉编译后生成的.o和.exe等文件,这在打包要发布一个release的时候非常有用
2、已使用git add缓存代码,未使用git commit
- 使用 git reset HEAD filename
git reset HEAD filename
- 放弃所有文件修改 git reset HEAD
git reset HEAD
- 此命令用来清楚git 对于文件修改的缓存,相当于撤销git add 命令所做的工作。在使用此命令后,本地的修改并不会丢失,而是回到了第一步1.未使用git add缓存代码,继续使用git checkout -- filename,就可以放弃本地的修改
- git reset --hard 和 git clean -f 是一对好基友,结合使用能让你的工作目录完全回退到最近一次commit的时候。
先git reset --hard 后 git clean -f,使用git status 查看,能看到现在是一个干净的工作目录,可以重新开始了。
3、已经用git commit 提交了代码
- 使用git reset --hard HEAD^ 来回退到上一次commit的状态
git reset --hard HEAD^
- 或者回退到任意版本git reset --hard commit id,使用git log命令查看git提交历史和commit id
git reset --hard commit id