7

Я не понимаю, как git управляет файлами при смене веток:

Когда я бегу

git branch xxx

Что происходит с существующими физическими файлами? Они перемещаются? Удаляется? Хранится в БД? Git включает магию файловой системы?

1 ответ1

10

Когда вы запускаете git branch xxx , Git только создает новую ветку, но фактически не переключается на нее - рабочее дерево вообще не изменяется. (Обратите внимание, что новая ветвь будет иметь те же файлы и историю, что и старая.)

Когда вы запускаете git checkout xxx для переключения веток, файлы из новой ветки извлекаются из "базы данных объектов", которая является архивом, хранящимся в .git/objects/ который содержит сжатые оригиналы каждого файла в каждом коммите. (Там же хранятся коммиты.)

Файлы, принадлежащие старой ветке, но отсутствующие в новой, просто удаляются (потому что они уже существуют в хранилище объектов, поэтому Git может просто извлечь их заново, если вы переключитесь обратно).

Когда некоторые файлы идентичны между ветками, git checkout вообще не трогает (без удаления / повторного извлечения). Таким образом, ваши незафиксированные изменения могут остаться в кассе.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .