git 双重签出,文件夹内容不见了

git double checkout, folder content gone

我有一个 git 存储库,其中包含主分支和开发分支。
假设我的分支叫做 branch1.
在我的存储库中,我有一个名为 myfolder 的文件夹。我在 branch1 并且我做到了

git checkout master
git checkout branch1

myfolder 现在是空的(原文如此),这是怎么发生的?

我应该注意到 myfolder 包含在 .gitignore 中,我怀疑这是问题的原因,但我不明白为什么。还有办法恢复它的内容吗?

根据您对情况的解释和您的观察,我推断如下:

  1. master 分支上,文件夹 myfolder 是存储库的一部分。
  2. branch1 分支上,该文件夹不是存储库的一部分,并且正在使用 .gitignore 规则从 Git 中排除。

因此您从 branch1 开始,该文件夹存在但被 Git 忽略,因此 Git 不知道其内容。现在,你切换到 master 分支;该分支确实跟踪该文件夹的内容。切换到它时,Git 将(未跟踪的)本地文件的内容与 master 分支中的内容进行比较。因为它没有运行任何差异,所以在检查分支时没有冲突,所以它工作正常。

您最终得到 master 分支和 tracked myfolder 文件夹。现在,您切换回 branch1myfolder 文件夹是您要切换的 master 分支的一部分,但它不存在于 branch1 分支中。所以 Git 将删除它。这就是你在 branch1 上没有那个文件夹的结果。

不幸的是,Git 似乎确实在没有进行检查的情况下覆盖了内容,它通常会在检测到可能丢失未提交的内容时进行检查。这可能是由于忽略规则。因此,恐怕无法从您之前未提交的状态中恢复确切的内容。你只有 master.

上的任何东西