3

我正在使用 SourceTree,发生的事情是我点击了“提交”,然后添加了所有更改的文件,但在提交之前我想删除其中一个文件以便稍后提交。

我右键单击我的文件并提供以下选择:

  • 消除
  • 丢弃
  • 停止跟踪
  • 从索引中取消阶段

在此处输入图像描述

我真的被这些选择弄糊涂了,我点击了“放弃”,现在这个文件中所做的所有工作都丢失了!!!

恐慌模式!如何恢复我在此文件中的更改?

谢谢!

4

3 回答 3

11

如果文件已暂存(看起来像您的文件),Git 的数据库中将存在一个快照。我们可以找回来!

.git/objects/Git在存储库中的方向内部存储快照。每个对象都存储在一个以其哈希命名的文件中,按前 2 个字符划分为目录。快照将一直存在,直到它们被打包到文件中.git/objects/pack/(这不会发生在从不是提交的一部分的快照中)或垃圾收集(最终会发生在您丢失的文件中)。困难的部分将是弄清楚它是哪个对象。

要查找对象,请运行

ls -lRt .git/objects

获取按上次修改时间排序的所有对象的列表。这是我假设的存储库的样子:

$ ls -lRt .git/objects

.git/objects/22:
total 4
-r--r--r-- 1 peter peter 17 Sep  1 11:18 3b7836fb19fdf64ba2d3cd6173c6a283141f78

.git/objects/f7:
total 4
-r--r--r-- 1 peter peter 17 Sep  1 11:09 0f10e4db19068f79bc43844b49f3eece45c4e8

.git/objects/54:
total 4
-r--r--r-- 1 peter peter 51 Sep  1 11:08 3b9bebdc6bd5c4b22136034a95dd097a57d3dd

.git/objects/e8:
total 4
-r--r--r-- 1 peter peter 134 Sep  1 11:08 e8417380c89509ec1e5b67c15469547a4489c2

.git/objects/e6:
total 4
-r--r--r-- 1 peter peter 15 Sep  1 11:08 9de29bb2d1d6434b8b29ae775ad8c2e48c5391

git cat-file -p <hash>

在候选对象上,直到找到您丢失的对象。请记住将目录名称中的 2 个字符添加到哈希中。就我而言,如果我对 11:09 开始的文件感兴趣

git cat-file -p f70f10

狩猎愉快。

于 2013-09-01T15:25:17.860 回答
1

在 Netbeans 中,我通过使用它的历史选项来恢复 sourcetree 删除的文件,成功地恢复了文件。如果您右键单击项目并转到历史记录,则可以选择恢复已删除的文件。我知道这个问题有点老了,但希望这有助于其他人遇到它。

于 2017-05-22T14:15:25.597 回答
0

在 SourceTree 中 - 假设您有一些您正在查找的文件的提交历史记录 - 您可以通过以下两种方式之一“删除”文件后恢复部分或全部工作:
1)在“暂存索引”中选择文件区域或“工作树”区域。在详细信息窗口中,SourceTree 将向您显示整个文件(因为您删除了它,所以它的全部内容都被“更改”了)。然后,您可以将该窗口的全部内容复制/粘贴到文本编辑器中,并将文件重新插入到您的工作副本中。
2)在“暂存索引”或“工作树”区域选择文件并右键单击以访问Reset to Commit功能。然后,您选择要将文件恢复到哪个提交,然后单击确定。

于 2014-04-08T01:08:35.783 回答