git 意外地恢复为主服务器,丢失未提交的更改

xdnvmnnf  于 2023-02-11  发布在  Git
关注(0)|答案(7)|浏览(127)

在主分支上工作时,我忘记创建新分支。对文件进行了更改,然后无意中恢复到主分支,丢失了所有更新。我没有提交更新的文件。
我怎样才能找回它们?

lzfw57am

lzfw57am1#

如果您没有提交暂存隐藏所做的更改,则无法恢复这些更改。
编辑:恢复丢失的更改。将此添加到Mark Longair's建议(在评论中)。这还包括下面(*)他的回答中的一些SO链接,我发现这些链接信息量很大。

  • 如果你曾经提交过某个变更,但是丢失了那个提交(比如在分离状态下提交),你可以使用reflog找到那个提交。
  • 如果你丢失了你最后的阶段性修改,你也可以恢复它。看这个问题 *。(我自己从来没有用过或试过)。
  • 如果你隐藏了一个修改,你也可以使用popapply来恢复它。(我不确定弹出/删除的隐藏是否也可以恢复)。你可能会发现Recover dropped stash in git很有用。

如果还有其他任何人可以建议的方法,我会进一步编辑这个答案来添加它们。

9avjhtql

9avjhtql2#

两个远景:一些IDE,比如 Delphi ,保存了编辑器历史记录,你可以在那里找到一些资源。
接下来,如果您的本地工作目录位于MyDocuments文件夹中,它可能已经自动备份Windows Home Server,Carbonite,MozyPro等。这些通常是'设置它,忘记它'。也许你忘了它?

e3bfsja2

e3bfsja23#

我也陷入了同样的处境。
在硬重置之前,终端中有一个更改文件的列表,进入我的编辑器(Sublime 2,不过没关系),打开每个文件并单击cmd+z(撤消)一次,这有效地撤消了硬重置所做的更改,我得到了我未提交的更改:)

f1tvaqid

f1tvaqid4#

这里的关键问题是你在修改文件后做了什么。如果你创建了一个包含文件新状态的提交,那么你应该能够通过查看git reflog中最近的条目,找到提交的SHA1 sum,然后用git branch recovered <SHA1sum>创建一个新的分支,或者类似的方法来恢复它们。
如果您对任何文件执行了git add来暂存它们,您也应该能够恢复它们,但这是相当多的工作- Jakub在此答案中描述了如何做到这一点。
如果你碰巧做了一个git stash来给予自己一个干净的状态,那么当然你可以像其他任何隐藏一样把它拿回来。
否则,恐怕消息不妙。
我希望事后指出这一点不会让人生气,但是如果只是切换回master分支,您不应该需要使用任何可能丢失数据的命令-git checkout master会告诉您已经在master分支上,并显示任何未提交的更改。(如果有未提交的更改,git reset --hard应该有一个“是的,我真的是这个意思”的确认,考虑到人们^W经常以这种方式丢失数据。)

dbf7pr2w

dbf7pr2w5#

git reflog会按照时间顺序向你显示你所有提交的历史记录。
如果您在“ checkout master”时丢失了更改,那么您可能是在无头工作。git status将告诉您是否在无头工作。(git branch也是如此)。
无头工作并没有那么糟糕(我一直在故意这样做),但是你会更加依赖于reflog。
如果你没有提交你的更改,无论如何,那么就没有办法检索这些文件。唯一可能发生这种情况的现实方式是如果你做了一个硬重置,或显式强制 checkout 。不要强制更改,除非你 * 确定 * 你对丢失数据感到舒服。
通常,在git中,“强制”是通过指定-f来完成的。

cl25kdpy

cl25kdpy6#

我做过同样的事情,不幸的是不止一次。没有提交任何东西,git就不知道你写了什么。即使你提交了,当向后看的时候,我也不确定反射是否会有帮助。

erhoui1w

erhoui1w7#

大多数IDE都有“本地历史记录”功能,包括所有JetBrains产品。您也可以在所有受影响的文件中尝试ctrl + Z。
作为最后的手段,您可以检查Time Machine备份/任何其他定期运行的备份软件

相关问题