Git用于撤销的操作主要有以下几个:
- $ git reset HEAD <file>... # 撤销暂存的文件
- $ git reset --hard HEAD # 撤销工作目录中所有未提交文件的修改内容
- $ git checkout -- <file>... # 撤销指定未提交文件的修改内容
- $ git reset [--soft | --mixed | --hard] [<commitID>] # 回退代码至某次提交
1. 撤销暂存的文件
对于已经暂存的文件,可以 $ git reset HEAD <file>... 命令来取消暂存。例如,文件file2.md已暂存:
运行 $ git reset HEAD <file>... 命令后,当前文件的状态为:
2. 撤销工作目录中所有未提交文件的修改内容
不加选项地调用 git reset 命令并不危险,因为它只会修改暂存区域,并不会被修改工作目录内的文件。但是,如果在调用的时候在调用时加上 --hard 选项,会撤销工作目录中所有未提交文件的修改内容。例如,当前文件的状态为:
运行 $ git reset --hard HEAD 命令后文件的状态为:
3. 撤销指定未提交文件的修改内容
如果你并不想保留对某个文件的修改,需要将其将它还原成上次提交时的样子(或者刚克隆完的样子,或者刚把它放入工作目录时的样子)。可以使用 git checkout -- <file>... 命令,例如:
注意:git checkout -- [file] 是一个危险的命令,你对那个文件做的任何修改都会消失,除非你确实清楚不想要那个文件的修改内容了,否则不要使用这个命令。
4. 回退代码至某次提交
命令:$ git reset [--soft | --mixed | --hard] [<commitID>]
--soft:修改本地仓库里面的数据为commitID对应快照的数据,所有更改过的文件都将变为“待提交的修改”。
--mixed:修改本地仓库和暂存区里面的数据为commitID对应快照里的数据,更改后的文件将被保留,但没有标记为提交(是git reset的默认操作)。
--hard:修改本地仓库、暂存区和工作区里面的数据为commitID对应快照的内数据,从<commitID>开始对工作树中跟踪的文件所做的任何更改都将被丢弃。