签出以前的提交,进行了更改,现在一切都丢失了吗?

时间:2019-03-18 22:01:48

标签: git

我签出了先前的提交。我花了几个小时做出许多更改并将其提交。然后我切换到另一个分支。当我切换回以前的提交时,我发现所有更改都已消失。我也没有在历史上看到他们。

换句话说,我做了以下事情:

  1. git checkout bfea631(先前的提交)
  2. 更改,添加并提交了许多文件/更改。
  3. git checkout master
  4. 做出承诺。
  5. git checkout bfea631(先前的提交)
  6. 忽略了我在第2步中所做的更改。

在上面的第2步中,我花了多个小时进行更改,因此能为您提供帮助。

2 个答案:

答案 0 :(得分:1)

您可以尝试使用git reflog查找提交。它显示了您的HEAD最近去过的地方。

答案 1 :(得分:0)

为什么会发生?

像您一样直接检查提交后,您的HEAD不再连接到分支。 (称为“分离的HEAD状态”)

这意味着进一步的提交将把您检出的提交作为其父提交,并最终形成一个提交链,但是除当前HEAD之外,其他任何东西都未引用该链。

现在,当您签出其他内容(分支或提交)时,提交(或提交链)将处于“悬挂状态”,等待垃圾收集器(取决于设置),但在大多数情况下都不少于90天,因此没有恐慌。

如何重回正轨

但是在垃圾回收发生之前,您可以通过再次检查(退出)将其恢复。要么只是在终端输出中查找,要么已经通过一些git命令(在可能的情况下很快捷!)显示了提交哈希,就像已经建议的那样,刷新日志,其中包含您以前的HEAD职位的历史记录。