我真的希望有人可以帮助我。我用谷歌搜索和搜索无休止地无济于事。
我有一个我正在研究的项目的git repo。我一直在研究许多不同的功能,每个功能都在不同的分支中。今天我想换到主分支并输入以下内容:
git checkout master
我收到一条警告说它无法更改为分支,因为我有未提交的文件(这些文件都没有我做过更改)所以作为一个完整的白痴我做了以下内容:
git checkout master -f
我很震惊地发现git status
显示绝对没有更改过的文件。我所有的改变都消失了吗?当我切换到我创建的其中一个分支时,git status
显示没有变化。我没有提交或暂存我更改的任何文件。
我真的希望有人可以帮助我,我正在进行多项工作。
答案 0 :(得分:1)
git checkout <branch>
所做的是它将当前分支(HEAD)与您要切换的分支之间的文件不同,它将版本替换为工作区版本(我认为暂存版本)来自<branch>
。在HEAD和<branch>
中相同的文件会保留其更改。
但是git checkout -f <branch>
用<branch>
中的版本替换了worktree和索引。您运气不好,除非您使用未保存的文件打开IDE(并且没有自动转换),或者从IDE备份文件或文件系统还原。
请注意,如果在某个时刻执行了 git add
个文件,您将在存储库的对象数据库中获得所述文件的一些内容,并且您可以尝试使用git fsck --unreachable
的帮助。
--force
,-f
- 切换分支时,即使索引或工作树与HEAD不同,也要继续。这用于 丢弃本地更改 。