回退分几种情况下的回退,源文件如下
修改第十行,添加"111-111-111",保存
1、还没有执行git add操作
还未执行git add
,需要将文件内容回退到未修改前
git checkout hello.c
执行之后"111-111-111"的修改直接消失
2、执行了git add 还没执行git commit
执行了git add
之后,git status
显示的状态就已经发生了变化,如下图
此时执行命令
git reset HEAD hello.c
将文件回退到git add
之前,执行后结果如下
此时已经可以使用1方法中的操作来处理了
3、已经执行了git commit
现在需要回退提交a4dc6915d6b9edfb0e9e64ffaec5848b068203d7
,直接执行命令
git reset 424bbe301394197da60a42b080131cc363987603
提交记录已经消失了,然后git status
查看文件也在处于被修改了的状态
此时又已经可以使用1方法中的操作来处理了
–hard参数
在回退的时候可以使用参数--hard
,它的作用是一步到位,清空一切。上述的几种回退,都是分步骤来执行的,都需要最终执行一步git checkout hello.c
来恢复到未接修改状态。以"2、执行了git add 还没执行git commit"这个回退来做个试验,执行如下命令
git reset HEAD --hard
执行完成之后使用git status
查看状态
啥修改都没有了,假如辛辛苦苦修改了好多,只是为了弥补一点错误而需要回退,那么要哭了。。。所以慎用!慎用!慎用!
回退同步到远程分支
其实回退完全不需要管远程仓库是什么情况,本地仓库修改完了push就好了。
远程显示两次提交,提交后的代码为
需要将这两笔回退掉,执行上面的"3、已经执行了git commit"进行本地回退
回退完成之后执行如下命令,推送到服务器
git push -f