【问题标题】:Can I recover staged changes after checkout?我可以在结帐后恢复分阶段的更改吗?
【发布时间】:2021-08-03 13:46:04
【问题描述】:

最近,我对 100 多个文件进行了许多更改。然后,不幸的是,我检查了以前的提交。结帐后,我的所有更改都消失了,不再可见(我正在使用 Fork 与 git 一起工作)。我的更改真的丢失了吗?还是可以恢复更改?

请帮忙!

【问题讨论】:

  • 如果你真的没有提交或隐藏,那么是的,你的工作可能会丢失。如果您的编辑器或 IDE 支持本地历史记录,那么您也许可以恢复那里的工作。
  • 您使用的命令是什么?如果要覆盖未暂存的更改,Git 通常不允许签出。
  • @Lars 太糟糕了。我认为如果使用了命令行,git 本身会警告你。我不知道有什么 GUI 可以做到这一点?
  • 鉴于你没有使用 Git CLI,所有的赌注都可能在这里被取消。但是,如果文件在 Git-CLI 术语中是 git add-ed,则每个文件的 data 都在 Git 中。 发现数据是棘手的部分。您可以使用git fsck 找到悬空的blob;在命令行中添加--lost-found 会使Git 将数据复制到.git/lost-found/other/ 中以哈希ID 命名的文件中。找出哪个悬空 blob 数据文件对应于哪个原始文件是hard。通常很难做到毫无意义:手动重建文件更容易。但这可能会有所帮助。
  • 我已经回答了here 如何恢复暂存文件。其他答案也很有趣。但是您确定您的更改没有被隐藏吗?

标签: git git-commit git-stage


【解决方案1】:

我在 VSCode 中工作并暂存所有更改(使用 GitLens 扩展)。
接下来我双击一个提交,这个提交被签出(没有消息或警告)。

不再显示之前阶段性的更改

最后一部分需要在命令行中进行验证,在 VSCode 之外。

git status
git stash list

如果没有,正如 Philippe 所说,git fsck 会有所帮助。

但首先检查您使用的是什么扩展:双击提交历史不应直接切换到它,除非您的 VSCode+Git Lens 也使用Git Graph extension
该扩展包括issue 39: "On double click - Checkout branch",这似乎与您所经历的很接近。

【讨论】:

  • 我重新检查了,它是 Git Graph 扩展,正是您链接的问题 39。
  • @Lars 那将是您问题的根源。如果可能,请暂时不要使用该扩展程序。
猜你喜欢
  • 2014-11-22
  • 2016-11-02
  • 2013-11-03
  • 2015-11-06
  • 2019-09-13
  • 2013-01-23
相关资源
最近更新 更多