在利用git协作过程中,经常需要进行代码的撤销操作,这个行为可能发生在工作区,暂存区或者仓库区(或版本库)。
我们先讨论在工作区与暂存区发生的撤销行为,这里会有两个命令提供帮助,git restore与git checkout。
后面我们会讨论在仓库区发生的撤销行为,这里同样会有两个命令提供帮助,git reset与git revert。
工作区和暂存区回滚
git restore
git restore
主要是在工作区与暂存区之间进行撤销操作。
撤销工作区文件更改
我们在工作区修改了某个文件,然后我们想放弃此次修改,那么可以使用git restore 文件路径
。修改文件后,我们查看文件状态,可以看到文件状态已经变化。
git status -s
输出:
M README.md
// 回滚所有变动的文件
git restore *
// 回滚某个文件
git restore README.md
如果我们同时修改了多个文件,想全部撤销,则可以执行git restore .
命令
结论:git restore pathspec
指令使得在工作空间但是不在暂存区的文件撤销更改(内容恢复到没修改之前的状态)。
撤销暂存区文件更改
git restore --staged pathspec
指令将暂存区的文件撤回到工作区,但不会更改文件的内容。我们将某个文件进行修改并添加到暂存区,查看状态。
git status
输出:
...
Changes to be committed:
...
modified: README.md
进行撤销后,再进行状态的查看:
git restore --staged README.md
git status
输出:
...
Changes not staged for commit:
...
modified: README.md
...
如果我们想撤销暂存区的所有文件改动到工作区,则可以执行git restore --staged .命令
从上面我们能看出git