在git中更改分支时,文件如何替换?

Ber*_*ala 8 filesystems git

关于 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根本不接触它们(不删除/重新提取)。这样,您未提交的更改可以在结帐时保留。