繁体   English   中英

在进入另一个分支并返回后,我看不到我在 git 分支中所做的文件更改

[英]I can't see file changes I made in my git branch, after I went in to a different branch and came back

我克隆了我的存储库。 从我克隆到的文件夹中创建了一个项目。 对 5 个文件进行了更改,运行了测试。 一切都好。 然后我意识到我没有创建一个分支,我所有的更改都在“master”分支中。 我'git add \\path\\to\\file(s)',但我没有提交它们。 我惊慌失措。 我通过执行git checkout -b 'X'创建了一个新分支git checkout -b 'X' 没有意识到,通过这样切换,所有内容都已经从“master”进入到“X”,按照互联网的提示,我做了git checkout master path/to/file(s) which were changed in mastergit checkout master path/to/file(s) which were changed in master了将这 5 个文件带入分支“X”。 现在意识到我的错误,我进入“master”查看我的文件更改。 它们不在“master”或“X”分支中!! 当我运行'git status'我看到以下内容。`在 master 分支上,您的分支领先于 'origin/master' 3065 次提交。 (使用“git push”来发布你的本地提交)

` 更改到哪里去了? 如何恢复它们? 这是 4 天的工作,牺牲了我的感恩节假期。 有人会在这里帮助我吗? 我在 IntelliJ 工作。 生无可恋。 非常感谢提前。

首先,在运行任何进一步的 git 命令或尝试其他任何操作之前,使用 .git 文件夹压缩整个项目。

您最简单的选择可能是使用 intelliJ 本地历史记录: https ://www.jetbrains.com/help/idea/local-history.html

据我所知,它默认启用,你应该很容易找回你删除的文件: https : //blog.jetbrains.com/idea/2008/01/using-local-history-to-restore-deleted-文件/

然而,即使使用 git only,一切都还没有丢失。 当您发出git add命令时,您已经为这些文件创建了 git blob。 当您执行git checkout master . 它们不再在 git index 中,但在 git 进行垃圾收集之前,它们仍然物理上位于 .git 中。

我尝试在本地对您的情况进行建模,在使用另一个分支的更改更新我的本地索引后,我看到以下表示先前添加的文件的悬空 blob:

$ git fsck
Checking object directories: 100% (256/256), done.
dangling tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904
dangling blob f2734a2fe05bfe4293d5a408c7e2ce849cbc62b2

我做了git fsck --lost-found ,在.git\\lost-found\\other\\f2734a2fe05bfe4293d5a408c7e2ce849cbc62b2文件中,我确实找到了更新测试文件的内容。

您可以在免费的 Pro Git 书籍的Git Internals - Plumbing and Porcelain章节中找到有关 git 如何在内部存储内容的更多信息。 它还提供了许多有用的低级命令,可以在此类紧急情况下为您提供帮助。

为了确保这种情况不再发生,我建议使用Git 工具 - 重置解密章节。 它用不同的命令行选项解释了git checkoutgit reset的确切行为,带/不带路径,带/不带分支。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM