Git撤销操作
一、修改的文件尚未执行add
这种情况下,我们的工作区是需要修改的,而暂存区是干净的,因此这一步需要使用git checkout
命令
对于单个文件(以a.txt为例)
git checkout a.txt
对于整个文件夹,可以直接用.代替
git checkout .
注意:如果想要撤销新增的文件,这种方法不起作用!
二、修改的文件已经add 尚未commit
这一步需要使用git reset
命令
值得注意的是,git reset
命令有三种模式:
-
mixed模式
git reset
即为该模式 -
soft模式
git reset --soft
-
hard模式
git reset --hard
对于mixed模式,会清除暂存区,保留工作区,即撤销“add”这步操作,让其回到add之前(注意:对工作区的修改仍然存在,撤销的仅仅只是add的过程),因此,还需要再执行一次git checkout
才行
对于单个文件(以a.txt为例)
git reset HEAD a.txt
git checkout a.txt
对于整个文件夹
git reset HEAD
git checkout .
三、修改的文件已经commit
这一步还是需要使用git reset
命令,但是不同的是,我们需要使用soft模式或者hard模式
对于soft模式,会变换版本,但是保留暂存区,换言之,仅仅是撤销了"commit"这步操作,“add”所施加的影响还在
而hard模式就非常霸道了,会直接变换版本,清空暂存区和工作区,换言之,是彻彻底底地擦出了修改的痕迹,最直接地复原了最初的版本
一般使用hard的情况会比较多
git reset --hard HEAD^
这个^代表是退回上一个版本,也可以用commit id取代
如果还没有commit,其实也可以使用–hard模式
git reset --hard HEAD
这样会直接恢复到当前版本最开始的样子,–hard模式简单有效,十分推荐~