丢失未提交的更改GitExtensions

时间:2017-10-03 13:18:27

标签: git

我正在使用GitExtentions维护我的存储库.. 长话短说我丢失了我未提交的文件......

我会尝试解释我做了什么以及我记得什么,希望有人可以帮助我...

  • 我正在处理约20个未提交的文件。
  • 在某些时候我意外地犯了他们,
  • 然后我还原了提交和
  • 然后我将当前的早午餐重置为之前的提交...

那时我发现我失去了我正在做的一切...... 你能帮我吗?

HEAD文件的最后3行以下..

702b3507802dd7ffb1ee8f0c1d18da584af912de ff4bdfc3e0e6c2a2133702e081a8c86ae929d1a7 Gabriele <gabbo.spina@gmail.com> 1507034589 +0200 commit: fixed bug in processing pressure
ff4bdfc3e0e6c2a2133702e081a8c86ae929d1a7 ff4bdfc3e0e6c2a2133702e081a8c86ae929d1a7 Gabriele <gabbo.spina@gmail.com> 1507034629 +0200 reset: moving to HEAD
ff4bdfc3e0e6c2a2133702e081a8c86ae929d1a7 702b3507802dd7ffb1ee8f0c1d18da584af912de Gabriele <gabbo.spina@gmail.com> 1507034651 +0200 reset: moving to 702b3507802dd7ffb1ee8f0c1d18da584af912de

1 个答案:

答案 0 :(得分:0)

因为您提交了文件,所以应该能够恢复。几乎所有git命令都是非破坏性的,即使它们看起来不是这样。让我们通过这个来完全理解如何恢复:

首先,你有一个带有一些历史记录的回购(导致下面标记为'O'的提交)和一些未提交的文件。但是您提交了文件(下面提交标记为X)。

... O -- X <--(master)

然后你还原意外提交

... O -- X -- !X <--(master)

现在你的master头部提交,可能是你的索引和工作树,看起来就像他们在O那样做了。然后你做了reset。我承认我不清楚为什么你做了一个恢复和重置 - 他们通常被认为是处理问题的替代方法,每个方面都有利有弊;在这种情况下,reset有效地撤消revert。但无论如何,现在你已经

... O  <--(master)
     \
      X -- !X

请注意,即使它们似乎已消失,数据库中仍然存在X!X;由于X是您正在处理的文件的(意外)提交,因此您可以使用此事实进行恢复。

使用reflog,您可以找到X的名称。说

git reflog master

你究竟看到的将取决于其他行动是否导致master移动;所以你查看revert命令的输出并找到它的reflog名称(类似master@{1})。然后你可以做

git checkout master@{1}^ -- .

从意外提交更新索引和工作树,将这些更改重新置于未提交状态。这确实会对变化进行分级,因此您可能希望

git reset HEAD -- .

注意,如果您知道用于它的提交消息,则reflog也可能为X提交本身提供直接名称。所以有不止一种方法可以做到,但上面应该是一个相当不错的起点。