本地修改还未添加到暂存区
如果你只是对工作区的文件进行了修改,但还没有使用 git add
命令将这些修改添加到暂存区,那么可以使用 git checkout
或 git restore
命令来取消这些修改。
使用 git checkout
命令
bash
git checkout -- .
在上述命令中,--
用于明确指定后面跟的是文件路径,.
代表当前目录下的所有文件。执行该命令后,工作区所有未添加到暂存区的修改都会被撤销,恢复到上一次提交时的状态。
使用 git restore
命令
bash
git restore .
git restore
是 Git 2.23 版本引入的新命令,用于恢复工作区文件。同样,.
表示当前目录下的所有文件,执行此命令后,工作区未暂存的修改将被丢弃。
本地修改已添加到暂存区但未提交
如果你已经使用 git add
命令将修改添加到了暂存区,但还没有使用 git commit
进行提交,那么可以分两步来取消这些修改。
第一步:将暂存区的修改撤回到工作区
bash
git reset HEAD .
此命令会将暂存区的所有修改撤回到工作区,HEAD
代表当前分支的最新提交,.
表示当前目录下的所有文件。
第二步:取消工作区的修改
可以使用前面提到的 git checkout -- .
或者 git restore .
命令来取消工作区的修改。
本地修改已提交
如果你已经使用 git commit
命令将修改提交到了本地仓库,想要取消这些提交,可以使用 git reset
或者 git revert
命令,不过这两个命令有不同的效果:
使用 git reset
命令
bash
git reset --hard HEAD~n
其中,--hard
选项表示将工作区和暂存区都重置为指定提交的状态,HEAD~n
表示当前提交的前 n
个提交。例如,git reset --hard HEAD~1
会撤销最近的一次提交,使工作区和暂存区都恢复到上一次提交时的状态。需要注意的是,git reset --hard
会丢失指定提交之后的所有提交记录,因此在使用时要谨慎操作。
使用 git revert
命令
bash
git revert HEAD~n..HEAD
这个命令会撤销从 HEAD~n
到 HEAD
之间的所有提交,并生成一系列新的提交来记录这些撤销操作。与 git reset
不同,git revert
不会改变提交历史,只是通过新的提交来抵消之前的提交,适用于多人协作的公共分支。例如,git revert HEAD~2..HEAD
会撤销最近的两次提交。