签出 master 分支后未暂存和未提交的文件更改消失了

Unstaged and uncommitted changes to files gone after checking out master branch

我真的希望有人能在这里帮助我。我用谷歌搜索并无休止地搜索无济于事。

我有一个我正在处理的项目的 git 存储库。我一直在研究许多不同的功能,每个功能都在不同的分支中。今天想换到master分支,输入如下:

git checkout master

我收到一条警告,指出它无法更改到分支,因为我有未提交的文件(none 这些文件是我已更改的文件)所以 作为完全白痴我做了以下事情:

git checkout master -f

我震惊地发现 git status 显示完全没有更改的文件。我的所有更改都消失了吗?当我切换到我创建的分支之一时,git status 没有显示任何变化。我没有提交或暂存我更改过的任何文件。

我真的希望有人能帮助我,我花了好几天的时间来开发我正在开发的功能。

git checkout <branch> 的作用是获取当前分支 (HEAD) 和您要切换到的分支之间不同的文件,它用来自 <branch> 的版本。 HEAD 和 <branch> 中相同的文件保留其更改。

但是 git checkout -f <branch> 将工作树和索引都替换为 <branch> 中的版本。你运气不好,除非你 IDE 打开了未保存的文件(并且没有自动恢复),或者来自 IDE 的备份文件,或者文件系统恢复。

注意如果你做了 git add 文件,你会在版本库的对象数据库中有这些文件的一些内容,你可以试试在 git fsck --unreachable.

的帮助下恢复它

git-checkout(1) manpage 说:

--force, -f

  • When switching branches, proceed even if the index or the working tree differs from HEAD. This is used to throw away local changes.