git如何恢复本地未提交的代码?
1.情景展示
在实际开发过程中,遇到代码冲突,很正常,解决起来也简单。
但是,我遇到的这种情况,却不常见。
在本地改了一周的代码,最后想要提交,为了不和别人提交的代码产生冲突,我们需要先更新,再提交。
即使有冲突,也在本地解决好再提交。
问题来了:
更新完成以后,我本地的修改后代码全没了(idea更新完有提示,是否需要回滚,但是回滚什么内容,我没看)。
一朝回到解放前,这可咋整?
2.具体分析
经过和我历史提交的代码对比,发现:
别人把我所修改的文件目录偷偷换了位置,导致我即使想使用本地历史还原都不行。
这可咋整?
3.解决方案
通过idea的本地历史记录进行恢复。
正常情况下,如果别人的代码把我们本地的代码给覆盖了,我们可以这样做:
选中被覆盖的文件,右键-->Local History-->然后打开的就是此文件在本地的历史修改记录。
找回本地已修改的代码
现在,既然别人修改了你的文件所在目录,那就找到它的上级目录所在位置,右键,查看本地操作历史。
如果不确定该选择哪个目录,我们可以直接选中项目名称。
我们可以看到:
Update from VCS,直接选择离它最近的一个历史变更记录就行了(Update from VCS下面就是本地最新的代码)。
点击它,即可对比远程仓库和本地文件的变化。
这样就能找回本地修改的代码了。
恢复本地修改的代码
点击本地已经被删除的目录,双击打开,全选,复制。
然后找到更新后此文件,并打开。
然后,全选,右键粘贴,这样就能将代码更新成自己已经修改好的代码了。
4.提交代码的正确流程
当然,出现这种情况,也跟我错误地使用Git操作流程有关。
如果我先将代码提交到本地仓库,再去拉取远程仓库的代码,就不会导致本地代码丢失的问题。
而我先前的错误操作习惯是:
直接更新远程仓库代码,这才导致这次事故的发生。
如何正确地提交代码到远程仓库?
第一步:commit
即提交代码至本地仓库。
点击工具栏的提交按钮,会自动切换到提交窗口,如下图所示。
勾选上要提交的代码(修改的文件、新增的文件)。
然后,点击“Commit”,完成提交。
提交完成,右下角会有提示。
第二步:pull
即从远程仓库拉取代码。
如果提交的是本地所有文件,那么,正常情况下,提交完成后,这里将不再有未提交文件。
拉取代码完成后,右下角会有提示。
如果这个时候,有代码冲突的话,需要进行处理。
将冲突解决完后,启动项目测试是否有问题,没有问题的话再push。
第三步:push
将本地仓库代码提交至远程仓库。
点击工具栏的“推送”按钮,来到下面推送详情界面。
确认自己将要推送的代码,点击“Push”。
这样操作会存在一个问题:
如果将本地代码commit到本地仓库之后,如果没有立即push到远程仓库,经常会遇到下列情形:
别人推送在你推送之前。
此时,如果你点击push按钮后,将会提示推送失败,即本地不是最新代码。
需要将本地代码更新到最新后,才能push。
解决方案有两种:
一种是:点击合并按钮进行合并,代码合并完成后,会自动将代码推送至远程仓库。
另一种是:点击取消按钮。
然后拉取远程代码,拉完后再推送。
所以,为了规避这种麻烦,我们最好在pull并处理完代码冲突问题后,立即进行push。
另外,git记录的是你在本地仓库的提交时间,而不是推送时间。
比方说:我在本地12:40将代码提交到了本地仓库,但是,到了下午3:30才将代码推送到远程仓库。
等代码推送成功后查看git操作记录,将会发现代码的提交时间是12:40,而不是3:30。
在提交界面,如果发现并没有包含所有待提交的代码。
需点击“刷新”按钮。
commit之后,无法回滚。
将代码提交到本地仓库后,将无法通过菜单操作进行代码回滚。
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/18065850