Чтобы сделать это более конкретным, давайте назовем файл, который вы удалили в Branch 2 foo.txt
.Когда вы объединяете ветку 2 с веткой 1, этот файл теперь также удаляется и в ветке 1.Поскольку Branch 3 не изменяет этот файл, он остается удаленным в Branch 1 даже после объединения Branch 3.
Лучший способ подумать об этом - объединение копий изменений из одной ветви.другому.Он не копирует весь снимок при слиянии.Это все еще немного волнистые, хотя.Чтобы получить более точную мысленную модель того, как работает git, важно понять, что такое коммит.По сути, коммит - это набор изменений, а также некоторые дополнительные метаданные, такие как метка времени, имя автора и т. Д. В этой статье приводится подробное описание, которое очень полезно.
Ветвь - это последовательность коммитов.Когда вы извлекаете ветку, git создает локальные копии всех файлов, которые он отслеживает, применяя все изменения в коммитах в этой ветке.То же самое касается слияния: git merge branch1
будет применять все изменения, которые находятся в branch1, но не в текущей ветви, к локальным файлам.
Теперь легче понять, что происходит в следующих командах:
git checkout branch1
git merge branch3
Поскольку Branch 3 не изменяет файл, который был удален в Branch 1, git оставляет его как есть.Git будет применять только те изменения из ветви 3, которые еще не являются частью ветви 1.