git 双重签出,文件夹内容不见了
git double checkout, folder content gone
我有一个 git 存储库,其中包含主分支和开发分支。
假设我的分支叫做 branch1
.
在我的存储库中,我有一个名为 myfolder
的文件夹。我在 branch1
并且我做到了
git checkout master
git checkout branch1
myfolder
现在是空的(原文如此),这是怎么发生的?
我应该注意到 myfolder
包含在 .gitignore
中,我怀疑这是问题的原因,但我不明白为什么。还有办法恢复它的内容吗?
根据您对情况的解释和您的观察,我推断如下:
- 在
master
分支上,文件夹 myfolder
是存储库的一部分。
- 在
branch1
分支上,该文件夹不是存储库的一部分,并且正在使用 .gitignore
规则从 Git 中排除。
因此您从 branch1
开始,该文件夹存在但被 Git 忽略,因此 Git 不知道其内容。现在,你切换到 master
分支;该分支确实跟踪该文件夹的内容。切换到它时,Git 将(未跟踪的)本地文件的内容与 master
分支中的内容进行比较。因为它没有运行任何差异,所以在检查分支时没有冲突,所以它工作正常。
您最终得到 master
分支和 tracked myfolder
文件夹。现在,您切换回 branch1
:myfolder
文件夹是您要切换的 master
分支的一部分,但它不存在于 branch1
分支中。所以 Git 将删除它。这就是你在 branch1
上没有那个文件夹的结果。
不幸的是,Git 似乎确实在没有进行检查的情况下覆盖了内容,它通常会在检测到可能丢失未提交的内容时进行检查。这可能是由于忽略规则。因此,恐怕无法从您之前未提交的状态中恢复确切的内容。你只有 master
.
上的任何东西
我有一个 git 存储库,其中包含主分支和开发分支。
假设我的分支叫做 branch1
.
在我的存储库中,我有一个名为 myfolder
的文件夹。我在 branch1
并且我做到了
git checkout master
git checkout branch1
myfolder
现在是空的(原文如此),这是怎么发生的?
我应该注意到 myfolder
包含在 .gitignore
中,我怀疑这是问题的原因,但我不明白为什么。还有办法恢复它的内容吗?
根据您对情况的解释和您的观察,我推断如下:
- 在
master
分支上,文件夹myfolder
是存储库的一部分。 - 在
branch1
分支上,该文件夹不是存储库的一部分,并且正在使用.gitignore
规则从 Git 中排除。
因此您从 branch1
开始,该文件夹存在但被 Git 忽略,因此 Git 不知道其内容。现在,你切换到 master
分支;该分支确实跟踪该文件夹的内容。切换到它时,Git 将(未跟踪的)本地文件的内容与 master
分支中的内容进行比较。因为它没有运行任何差异,所以在检查分支时没有冲突,所以它工作正常。
您最终得到 master
分支和 tracked myfolder
文件夹。现在,您切换回 branch1
:myfolder
文件夹是您要切换的 master
分支的一部分,但它不存在于 branch1
分支中。所以 Git 将删除它。这就是你在 branch1
上没有那个文件夹的结果。
不幸的是,Git 似乎确实在没有进行检查的情况下覆盖了内容,它通常会在检测到可能丢失未提交的内容时进行检查。这可能是由于忽略规则。因此,恐怕无法从您之前未提交的状态中恢复确切的内容。你只有 master
.