git 各阶段就不一一介绍了,可以看之前的blog:https://blog.youkuaiyun.com/yj310873325/article/details/79255134
主要介绍各阶段的撤销查询:
1.查看修改内容:
git diff (已修改,未暂存)
git diff --cached(已暂存、未提交)
git diff master origin/master(已提交、未推送) (master本地分支、origin/master远程分支)
2. 撤销修改内容:
2.1 已修改、未暂存
git checkout . 或者git checkout 文件名
或者 git reset --hard
git add .的反义词是git checkout .。做完修改之后,如果你想向前走一步,让修改进入暂存区,就执行git add .,如果你想向后退一步,撤销刚才的修改,就执行git checkout .。注意修改一部分确认没问题后,要及时执行git add . 否则reset后就会回到上一次add的地方,中间的修改就都没了。或者只checkout某一个文件名。
2.2 已暂存,未提交
先执行git reset 然后执行git checkout .
git reset只是把修改退回到了git add .之前的状态,也就是说文件本身还处于已修改未暂存状态,你如果想退回未修改状态,还需要执行git checkout .。
或者执行一步 git reset --hard
或许你已经注意到了,以上两个步骤都可以用同一个命令git reset --hard来完成。是的,就是这个强大的命令,可以一步到位地把你的修改完全恢复到未修改的状态。但是是全部内容,有点暴力,如果内容较少,可以修改单个文件内容。
2.3 已提交,未推送
你的手太快,你既执行了git add .,又执行了git commit,这时候你的代码已经进入了你的本地仓库,然而你后悔了,怎么办?不要着急,还有办法。
git reset --hard origin/master
还是这个git reset --hard命令,只不过这次多了一个参数origin/master,正如我们上面讲过的,origin/master代表远程仓库,既然你已经污染了你的本地仓库,那么就从远程仓库把代码取回来吧。
2.4已推送
很不幸,你的手实在是太快了,你既git add了,又git commit了,并且还git push了,这时你的代码已经进入远程仓库。如果你想恢复的话,还好,由于你的本地仓库和远程仓库是等价的,你只需要先恢复本地仓库,再强制push到远程仓库就好了:
git reset --hard HEAD^
git push -f