我已经设法犯了一个大错误(在一个星期一早晨),在Master上工作,忘记创建新分支,对文件进行更改,然后无意中将其还原到Master,失去了所有更新。我没有提交更新的文件。
我丢失了所有更新还是可以找回它们?
不要问我怎么做,因为每次我想起来我都要面对自己。
我已经设法犯了一个大错误(在一个星期一早晨),在Master上工作,忘记创建新分支,对文件进行更改,然后无意中将其还原到Master,失去了所有更新。我没有提交更新的文件。
我丢失了所有更新还是可以找回它们?
不要问我怎么做,因为每次我想起来我都要面对自己。
Answers:
如果您尚未提交,暂存或隐藏所做的更改,则无法恢复这些更改。
编辑:恢复丢失的更改。在Mark Longair的建议上添加此内容(在评论中)。这还包括他在下面的答案中的几个SO链接(*),我发现这些链接非常有用。
如果您曾经提交过一些更改而丢失了该提交(例如以分离状态提交),则可以使用来找到该提交reflog。请参阅此SO问题*。
如果您丢失了上一阶段的更改,则也可以恢复。请参阅此SO问题*。(我自己从未使用过或尝试过)。
如果你已经藏匿的变化,你也可以使用恢复pop或apply。(我不确定弹出/删除的隐藏文件是否也可以恢复,但未提交)。您可能会在git中发现此恢复丢弃的存储很有用。
如果有人可以建议其他方法,我将进一步编辑此答案以添加它们。
stash提示使我找到了正确的做法。确实非常感谢
两个长镜头:一些IDE(例如Delphi)保留了编辑器历史记录。您可能在那里有追索权。
接下来,如果您的本地工作目录位于MyDocuments文件夹中,则它可能已经由Windows Home Server,Carbonite,MozyPro等自动备份了。这些通常是“设置后忘记了”。也许你忘了吗?
我陷入同样的境地。
在--hard重置之前,在终端中有一个已更改文件的列表,进入我的编辑器(Sublime 2,没关系),打开每个文件并按cmd + z(撤消)一次,这实际上撤消了更改通过硬重置完成,我退回了未提交的更改:)
此处的关键问题是对文件进行更改后的操作。如果创建的提交包含文件的新状态,则应该能够通过查看中的最新条目git reflog,找到提交的SHA1sum并使用git branch recovered <SHA1sum>或类似内容从中创建一个新分支来找回它们。在此答案中有一个执行此操作的示例。
如果您git add对任何文件进行了登台,也应该可以将它们取回,但这是更多工作-Jakub在此答案中描述了如何执行此操作。
如果您碰巧git stash要给自己一个干净的状态,那么您当然可以像其他藏家一样找回它。
否则,恐怕这个消息不好。
我希望事后指出这一点不会令人感到恼火,但只要切换回master分支,您就不必使用任何可能会丢失数据的命令-git checkout master会告诉您您已经在master分支上,并显示所有未提交的更改。(git reset --hard考虑到^W我以这种方式丢失数据的人的频率,可以说有一个“是的,我的意思是真的”确认是否存在未提交的更改。)
git reset --hard HEAD~1。所有未进行的未提交的更改都消失了。无话可问。
git reset --hard可能丢失数据将是一个很好的功能,而不是git那样做。
使用引用日志。git reflog将按时间顺序显示您已进行的所有提交的历史记录。
如果您由于“签出主人”而丢失了更改,那么您可能就没事了。 git status会告诉您是否没有头工作。(也是如此git branch)。
无头工作并不是那么糟糕(我一直在故意这样做),但是您将更加依赖reflog。
但是,如果您没有提交更改,则无法检索这些文件。发生这种情况的唯一现实方法是,如果您进行了硬重置,或明确地强制了结帐。千万不能强行改变,除非你确信你是舒服丢失数据。
通常,在git中,通过指定来执行“强制” -f。
不幸的是,我做了同样的事情,不止一次。如果不提交任何内容,git不会知道您写了什么。即使您确实提交了,然后向后退时,我也不确定反射是否会有所帮助。
git stash apply saved the day.