在Visual Studio 2013和TFS中,点击"撤消待处理更改"后如何恢复更改?

26
使用Visual Studio 2013和TFS,在提交之前我做了很多工作。然后,我不小心点击了“撤消待定更改”...以为它只会应用于我的解决方案中的一个项目。不幸的是,它被应用于所有项目。我该如何找回我的更改?
此问题以前曾被问过link。有人建议使用Reflector复制dll。我下载了Reflector,但不确定如何使用它。我该如何使用Reflector找回我的更改?

可能是[Team Foundation Server撤销待定更改后删除了本地文件]的重复问题(http://stackoverflow.com/questions/24637535/team-foundation-server-deleted-local-files-after-i-undid-pending-changes)。 - Daniel Mann
我已经提到它是一个重复项,但我需要进一步的信息。 - navig8tr
这是一个重复的问题,而且还是一个“向我推荐工具”的问题,在 Stack Overflow 上通常都不被接受。 - Daniel Mann
1
我并不是在寻求推荐的工具,我是在问如何获取更改--无论使用什么工具。 - navig8tr
我发现的所有重复内容都没有提供令人满意的答案。 - navig8tr
5个回答

34

仅供帮助。根据分享的stackoverflow问题链接,他想说的是:如果您没有构建项目,您可以在Reflector中打开上次构建的dll文件并查看文件的代码以及恢复代码。

您可以使用任何工具,例如Reflector或JetBrains的dotpeek

访问此链接了解有关dotpeek的更多信息

但是,如果您在执行撤销挂起更改之后构建了项目,则根据我的了解是不可能获得代码的。


1
有这么多的DLL文件,我不知道要打开哪一个。有什么建议吗? - navig8tr
2
你正在进行的项目是Windows/Web类型的吗?更重要的是,在撤销待处理更改后,你是否构建了你的应用程序? - Dnyanesh
1
太糟糕了,但不用担心,我不生气。 - navig8tr
1
这对我有用。请记住,您的变量名称可能会被搞乱一点,一些未指定类的属性可能被指定为“base”,并且一些基本实现可能会出现(例如泛型方法调用的类型或反之亦然)。但仍然比从(我的)记忆中重建要好得多。 - ouflak
2
对于我的情况,当我点击我的函数后没有任何反应时,我不得不使用右键单击“反编译源代码”。 - interesting-name-here
显示剩余3条评论

13

难以置信!在放弃并重写我丢失的所有代码后,我成功恢复了文件。在按下“撤消待处理更改”之后,我从未再次构建解决方案。然后,我关闭了解决方案,将整个工作区复制并以不同的名称保存。接着,我重新打开了原始解决方案。然后,我从丢失的文件的原始位置使用“添加现有项”。然后,(这是很酷的部分)我浏览到了复制的工作区,并在它们原来的位置上发现了丢失的文件完好无损。太棒了!我只希望在重写我的代码之前就这样做了!

对于我来说,这个解决方案纯粹是偶然发现的,但我希望将来有人能够使用这些信息。请注意,在撤消更改后,我从未构建过解决方案,这可能是丢失的文件仍然在它们的原始位置但在解决方案本身中不可见的原因。


3
复制整个目录并不是一种魔法 - 你从复制的工作区添加的文件也必须仍存在于原始目录中。看起来你创建了新文件并尝试将它们添加到TFVC,这种情况下"撤消待定更改"是有意义的,因为它不会删除你已经创建的新文件,而只是将它们从待提交的更改列表中移除。 - Eric
很不幸,这对我没有起作用,因为TFS继续撤销了我丢失的文件上的更改。不过还是找到了好东西。 - ouflak
撤销更改可能会带来灾难性的后果!有人测试过这个解决方案是否可以使用修改过的文件吗? - Shimmy Weitzhandler
我认为这个解决方案只适用于您向项目中添加文件的情况。如果您撤消了 TFS 上现有文件的更改,则可以在未重新构建项目的情况下使用 DotPeek 或 Reflector。 - Drew Aguirre

12
今天我遇到了这个问题,是因为我用未提交的版本覆盖了本地更改。我尝试反编译dll文件,但它太旧了没有这些更改内容。最终我在“AppData\Local\Temp\TFSTemp”目录中找到了TFS临时差异文件中的更改。这些文件都有类似“vctmp4316_370233.cs”的名称,但它们都在那里,幸运的是我能够恢复我的更改。
如果你使用MSTest单元测试,还可以尝试查找解决方案“TestResults”文件夹中的dll文件。
最后一步是设置某种备份系统,以避免再次发生此类情况。

1
我找不到这个文件夹?你是指项目的本地源代码控制文件夹吗?例如:Source/Workspaces/Project/App_Data? - SomeRandomDeveloper
2
不,我说的是你Windows用户文件夹中隐藏的AppData文件夹,例如C:\ Users \ SomeRandomDeveloper \ AppData \ Local \ Temp \ TFSTemp。 - Dave A

3

我曾经做过类似的事情,当我点击撤销时,它删除了我不想删除的文件。我只需在“解决方案资源管理器”中点击“显示所有文件”图标即可使文件可见,然后右键单击并选择“包括在项目中”。


1
今天发生了这件事。在我这种情况下,我正在处理一个现有的typescript文件。 幸运的是,该网站已经在我的浏览器选项卡中加载,并且我没有刷新页面。因此,我能够从Chrome的开发工具-源代码中复制代码。 我得到了这个想法,是通过寻求这个问题的解答后得到的,分享给其他人可能会有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接