Git撤销暂存区的修改
git add 添加文件到暂存区。
git commit 提交更改,把暂存区的所有内容一次性全部提交到当前分支,清空暂存区。
有两种相关操作
通过 git checkout – 文件名 命令可以撤销文件在工作区的修改
该命令是撤销我们在工作区全部的修改记录
git checkout -- ./
通过 git reset a 命令可以撤销指定文件的 git add 操作,即这个文件在暂存区的修改,但此时工作目录中a文件又成了已修改未暂存状态,用上面的命令再次撤销,变为clean状态,即清理干净
三种开发是常见场景
- 修改后,文件没有放入暂存区(即文件一直在工作区):用 git checkout – 文件名 撤销工作区的改动(回到跟版本库一样的状态,即回到最近一次 git commit时的状态,所有改动全部清除)
- 修改后,文件放入暂存区,且文件没有再次修改(即文件已经进入暂存区):分两步:先用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),再执行 git checkout – 文件名 清除工作区的改动
- 修改后,文件放入暂存区,且文件再次修改:分三步:先用 git checkout – 文件名 撤销工作区的改动,再用 git reset <文件名> 撤销 git add 操作(此时更改仍留在工作区),最后执行 git checkout – 文件名 清除工作区的改动
vim a.txt #修改工作目录文件
git status #此时会提醒Changes not staged for commit
git checkout -- a.txt #执行完这条命令,发现原理是把这个文件同步为暂存区的样子
注意,经过测试发现其原理是把当前文件同步为成暂存区的样子
如果是以下情况:echo "test" > b.txt
那么b.txt对git来说是未追踪文件Untracked files;此命令无效
Git撤销本地commit操作
写完代码后,我们一般这样
git add . //添加所有文件
git commit -m "本功能全部完成"
git reset --soft HEAD^
HEAD^的意思是上一个版本,也可以写成HEAD~1
如果你进行了2次commit,想都撤回,可以使用HEAD~2
不删除工作空间改动代码,不撤销git add,仅仅是撤回commit操作
git reset --mixed HEAD^
不删除工作空间改动代码,撤销commit,并且撤销git add . 操作,相当于撤回commit操作,撤回add操作,恢复到add之前内部,这个为默认参数,git reset --mixed HEAD^ 和 git reset HEAD^ 效果是一样的
git reset --mixed HEAD^
删除工作空间改动代码,撤销commit,撤销git add . 注意完成这个操作后,就相当于完全恢复到了上一次的commit状态。
git撤销merge
当我们使用git merge操作合并代码但还没add时,若想取消这次合并,使用命令
git merge --abort
假如不幸已经 git add 了,先用 git reflog 指令显示历史的操作,再用 'git reset --hard commit id’就可以回退到操作之前的状态了