关于 git 在更改分支时如何管理文件,我有些不明白:
当我跑
git branch xxx
Run Code Online (Sandbox Code Playgroud)
现有的物理文件会发生什么?他们被感动了吗?删除了吗?存储在数据库中?git 是否涉及文件系统魔法?
use*_*686 14
当您运行 时git branch xxx,Git 只创建新分支,但实际上并没有切换到它——工作树根本没有被修改。(请注意,新分支将具有与旧分支完全相同的文件和历史记录。)
当您运行git checkout xxx切换分支时,来自新分支的文件将从“对象数据库”中提取,该文件保存在.git/objects/包含每次提交中每个文件的压缩原件的存档中。(这也是提交本身的存储位置。)
属于旧分支但在新分支中丢失的文件会被简单地删除(因为它们已经存在于对象存储中,因此如果您切换回来,Git 可以重新提取它们)。
当分支之间的某些文件相同时,git checkout根本不接触它们(不删除/重新提取)。这样,您未提交的更改可以在结帐时保留。