#撤销指定文件
git checkout -- <file>
# 撤销所有
git checkout -- .
git checkout – . 丢弃全部,也包括:新增的文件会被删除、删除的文件会恢复回来、修改的文件会恢复。
请务必记得 git checkout -- <file> 是一个危险的命令。 你对那个文件在本地的任何修改都会消失——Git 会用最近提交的版本覆盖掉它。 除非你确实清楚不想要对那个文件的本地修改了,否则请不要使用这个命令。
#撤销所有
git reset HEAD .
#撤销指定文件
git reset HEAD <file>
这个命令仅改变暂存区,并不改变工作区,这意味着在无任何其他操作的情况下,工作区中的实际文件同该命令运行之前无任何变化。
撤销提交修改,即将commit操作撤销。
#回退最近的一次提交,即将本次提交撤销,回到暂存区
git reset --hard HEAD^
适用场景:开发过程,需求逻辑尚未实现,突然要切换版本解决问题,但是本次修改的代码并不想提交本地仓库,使用statsh
命令暂存修改。
#暂存本地修改
git stash
#查看暂存的信息
git stash list
#应用最近一次暂存的内容
git stash pop
#应用指定版本的暂存内容
git stash apply stash@{1}
#清空暂存栈
git stash clear
适用场景:版本之间的合并,如果合并过程中,出现同文件同区域代码冲突,自己无法判断应用哪个版本的逻辑,写该逻辑的同事不在,放弃本次合并。
命令:git merge --abort
命令git reset
- git reset --soft: 将分支回退到指定提交,工作区维持现状不变,暂存区会在现有基础上增加该commit之后的提交。
- git reset --mixed: (默认操作)将分支回退到指定提交,暂存区也被同步为该指定提交,工作区保持不变。
- git reset --hard: 将分支回退到指定分支,暂存区和工作区都会被同步为该指定的提交。
git reset后的三个参数回退程度是依次递进。 soft最轻微,它不会重置当前工作区和暂存区,只会将回退版本后续的提交加到暂存区。 mixed会改变暂存区,使它和回退版本同步。 hard会重置工作区和暂存区,使它和回退版本一致。
/*
git reset --soft target
*/
working index HEAD target working index HEAD
-------------------------------------------------------------
A B C C A B C
A B C A A B+C A
/*
git reset --mixed target
*/
working index HEAD target working index HEAD
-------------------------------------------------------------
A B C C A C C
A B C A A A A
/*
git reset --hard target
*/
working index HEAD target working index HEAD
-------------------------------------------------------------
A B C C C C C
A B C A A A A