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之后,无法回滚

将代码提交到本地仓库后,将无法通过菜单操作进行代码回滚。

 

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2024-03-11 12:50  Marydon  阅读(1774)  评论(0编辑  收藏  举报