对于git的认识从刚入职开始,简单了解后知道主要功能,代码托管,OK!
因为只是个简单的代码托管工具,所以对它的了解只是会简单使用即可,然而......问题出现了。
在一次对工程进行修改后(花费了我近一周的时间写的代码),开始使用git提交,我的步骤是:
1:git diff //终端查看有哪些修改,gitk工具当然可以,但看不到缩进的问题
2:git status //查看有哪些文件修改
3:git stash //隐藏本地修改,防止与第四步冲突
4:git pull //从服务器拉最新代码
5:git stash pop //释放自己修改的代码到本地
6:git add . //缓存修改的文件
7:git commit //提交
此时进入vi,就是在这时发现修改的代码中配置文件有个地方还没有修改过来,于是什么也没有写就退出vi,想要能回到git add .之前的状态,于是上网查解决办法,半个小时后看到一个命令git reset --hard HEAD,果断使用了,结果就是......本次修改全部不见了,回退到了上一次修改的状态,后悔死了,几天写的代码没了,全没了,待到第二天问了同事,告诉我:没救,重写吧!还好有那么些记忆,周六用半天全部重新写了一遍,因为之前用了git diff命令,所以还好有部分代码是可以看到的,但终端设置的滚动只有512行,所以只剩一部分代码(马上设置了终端,无限滚动)。
有了这次教训想必是要有所收获的,git回退。
$git checkout filename
本地修改后,回退已经缓存的文件
$git reset HEAD <文件路径> (撤销缓存)
$git checkout 文件路径 (回退修改)
本地修改后,回退已经提交的文件 (已经执行 $git commit -am "message" )
$git commit -am "message" filename
$git reset master~1 (master分支向前回退一个提交)
filename 的这次提交已经被取消
$git checkout filename 回到filename 被修改前的状态。
将filename文件回退到某个版本
$git log filename
选择回退的SHA1值,
$git checkout SHA1 filename
此时filename 是 SHA1时的文件内容
注意这种方式只回退了文件内容,原来的提交的commit 信息还在