在主分支上工作时,我忘记创建新分支。对文件进行了更改,然后不小心回到了主分支,导致所有更新都丢失了。 我没有提交这些更新的文件。
我该如何找回它们?
在主分支上工作时,我忘记创建新分支。对文件进行了更改,然后不小心回到了主分支,导致所有更新都丢失了。 我没有提交这些更新的文件。
我该如何找回它们?
如果你曾经 提交(commit) 了一些更改并且丢失了该提交(例如以分离状态提交),则可以使用 reflog
找到该提交。请参见此SO问题*。
如果你丢失了你最后一次暂存(staged) 的更改,也可以恢复它。请参见此SO问题*。(我自己从未使用或尝试过)。
如果你储藏(stashed)了一个更改,你也可以使用 pop
或 apply
恢复它。(我不确定未提交的弹出/丢弃的储藏是否也可恢复)。你可能会发现这个在 Git 中恢复丢失的储藏很有用。
.exe
文件。虽然不是完美的,但我成功地恢复了所有更改,而不必重新开始编写所有代码。 - Pedro Corso两种可能的解决方法:一些集成开发环境(IDEs)如 Delphi 会记录编辑器历史,你可以在那里找到备份。
其次,如果你将本地工作目录设置在“我的文档”文件夹中,它可能已经被 Windows Home Server、Carbonite、MozyPro等自动备份软件备份了,这些软件通常是“一劳永逸”的。也许你忘记设置备份?
我曾陷入同样的困境。
在进行硬重置之前,在终端上列出了更改文件的清单,进入我的编辑器(Sublime 2,不过这并不重要),打开每个文件并按下 cmd+z(撤消)一次,这有效地撤消了硬重置所做的更改,我重新获得了未提交的更改 :)
vscode
中使用vim,按下u
键无法撤销。所以,我切换了vim并按下ctrl+z
来恢复一切。 - Ruthvik Vailagit reflog
条目,找到提交的 SHA1 校验和,然后使用 git branch recovered <SHA1sum>
等命令从该提交创建一个新分支,这样就能够获取它们了。在这个回答中有一个这样的例子。git add
命令来将其存入暂存区 (stage),那么你也可以将它们找回,但这需要一些额外的工作,Jakub 在这个答案中描述了如何操作。git stash
命令以清除状态,那么当然可以像任何其他的 stash 一样找回它。master
分支,你本来不应该使用任何可能导致数据丢失的命令——git checkout master
命令已经会告诉你当前已经在主分支上,并显示任何未提交的更改。 (可以说,如果存在未提交的更改,git reset --hard
应该有一个“是的,我真的想这样做”的确认提示,因为人们经常因此丢失数据。)git reset --hard HEAD~1
命令时,Bash 命令行没有询问我任何问题。所有未暂存和未提交的更改都被删除了,没有任何提示。 - Robert Koritnikgit reset --hard
时出现“您确定吗?”确认可能会丢失数据,这将是一个好功能,而不是 git 的实际操作。 - Mark Longairgit reflog
将按时间顺序显示您所在的所有提交历史记录。git status
将告诉您是否正在没有头部的情况下工作(以及git branch
)。-f
来完成的。我做过同样的事情,不止一次。如果没有提交任何内容,git 就不知道你写了什么。即使你提交了,当回退时我也不确定 reflex 是否有帮助。
git stash apply
拯救了这一天。 - John