我不明白 git 在更改分支时如何管理文件:
当我跑步时
git branch xxx
现有的物理文件会发生什么?它们被移动了吗?被删除了吗?存储在数据库中了吗?git 是否涉及文件系统魔法?
答案1
当你运行时git branch xxx
,Git 仅创建新分支,但实际上并没有切换到它——工作树根本没有被修改。(请注意,新分支将具有与旧分支完全相同的文件和历史记录。)
当你运行git checkout xxx
切换分支时,新分支的文件将从“对象数据库”,这是保存在下的存档.git/objects/
,其中包含每次提交中每个文件的压缩原件。(这也是提交本身的存储位置。)
属于旧分支但在新分支中缺少的文件会被直接删除(因为它们已经存在于对象存储中,所以如果您切换回来,Git 只需重新提取它们即可)。
当分支之间的某些文件相同时,git checkout
根本不会触碰它们(不删除/重新提取)。这样,您未提交的更改可以在签出后保留。