撤销 git commit 命令和 git add 命令 git reset git checkout
https://git-scm.com/book/zh/v2/Git-%E5%B7%A5%E5%85%B7-%E9%87%8D%E7%BD%AE%E6%8F%AD%E5%AF%86
git 仓库三个内存区间:
- HEAD区: 最后一次提交的快照,git commit 后的文件集合
- Index区: 暂存区, git add 后的文件集合
- 工作区: 直接工作(修改,添加,删除文件)的区间,可直观查看
git reset
-
git reset --soft HEAD~
操作结果: 撤销了上一次 git commit 命令。 回滚到了git commit 的命令执行之前
修改了 HEAD区,向前移动HEAD指针,未修改 Index 区 和 工作区。 -
git reset [--mixed] HEAD~
操作结果: 撤销了上一次 git commit 命令和 git add 命令, 回滚到了所有 git add 和 git commit 的命令执行之前
修改了 HEAD区,向前移动HEAD指针,用 HEAD 指向的当前快照的内容来更新Index,修改 Index 区,但未修改 工作区。 -
git reset --hard HEAD~
操作结果: 撤销了上一次 git commit 命令和 git add 命令,并将上一次提交的内容覆盖当前工作区间,修改 Index 区 和 工作区
指定文件
git reset file.txt 或 git reset --mixed HEAD file.txt 或 git reset HEAD file.txt:只将 file.txt 从 HEAD 更新到索引中,不会移动HEAD指针,即恢复到 git add 之前(取消暂存)
git reset eb43bf file.txt 不让从 HEAD 拉取数据,而是指定一个提交来拉取该文件的对应版本来覆盖Index,在Index中将该文件恢复到指定版本
git checkout -- readme.txt
把readme.txt文件在工作区的修改全部撤销,这里有两种情况:
一种是readme.txt自修改后还没有被放到暂存区,现在,撤销修改就回到和版本库一模一样的状态;
一种是readme.txt已经添加到暂存区后,又作了修改,现在,撤销修改就回到添加到暂存区后的状态。
总之,就是让这个文件回到最近一次git commit或git add时的状态。

浙公网安备 33010602011771号