撤销
已经提交到暂存区了,想撤销提交
也就是说不想提交了,其他该咋样还是咋样,仅仅是不想提交到暂存区,即撤销 add。
git reset HEAD^ git reset HEAD^^ git reset HEAD~100 git reset HEAD <file>
如上,分别表示:
撤销前 1 次提交。
撤销前 2 次提交。
撤销前 100 次提交。
撤销 xxx 文件的提交。
已经提交到本地仓库了,想撤销提交
也就是说不想提交了,其他该咋样还是咋样,仅仅是不想提交到本地仓库,即撤销 commit。
git reset --soft HEAD^ git reset --soft HEAD^^ git reset --soft HEAD~100 git reset --soft HEAD <file>
get reset --hard HEAD
顺道谈谈 --hard:
不加参数是撤销暂存区。
加 --soft 是撤销本地仓库。
--hard 是撤销暂存区、本地仓库、工作区,通常是搞得乱七八糟之后,哎呀,重来重来,通通重来,注意:这是通通撤销,和下面的从本地仓库恢复至工作区,是两个概念。
恢复
工作区文件遭整出问题了,想从本地仓库恢复
git checkout -- itpow.txt
如上通过 git checkout(中文翻译:检出)将 itpow.txt 从本地仓库提取到工作区。注意两个横线后面有个空格,因为文件名不是 git 命令的参数,同时不要省略 --,因为一省略就变成切换分支了。
有人可能会问,为什么不用 git pull 从服务器拉下来恢复呢?
git pull 的第一步是从服务器远程仓库拉至本地仓库,如果二者版本一样,它就退出了,就不存在后面一步从本地仓库提取到工作区了。
当然如果我们觉得本地仓库版本比较旧,可以从服务器拉。
如果文件已经暂存至暂存区
git checkout -- <file> 之前应该先执行 git reset HEAD <file>,完整如下:
git reset HEAD itpow.txt git checkout -- itpow.txt
也就是说,我们应该先撤销暂存区,再恢复,这样:工作区、暂存区、本地仓库,才是匹配的。