Являются ли 2 ветви одинаковыми, если их окончательный снимок идентичен, но нет пути их фиксации?
Ниже приведен гипотетический сценарий, предназначенный для лучшего понимания опасности перебазирования.
Пользователь А делает 2 коммита. Сначала он добавляет (ставит) текстовый файл в корневой каталог со словом "Hello", фиксирует его, затем добавляет другой файл в тот же корневой каталог со словом "world", а затем фиксирует этот файл. Таким образом, его окончательный коммит соответствует корневому каталогу с 2 файлами. Один с одним словом "Привет", а другой с одним словом "Мир"
Пользователь B делает то же самое и в итоге получает те же 2 файла в своем проекте git root, ТОЛЬКО ТО, ЧТО ЭТО ДЕЛАЕТ В ОБРАТНОМ ПОРЯДКЕ: он сначала добавляет файл со словом "world", фиксирует его, а затем добавляет файл с слово "привет" и фиксирует это.
Наконец, давайте предположим, что пользователь A перенес свой проект в удаленный репозиторий, а затем пользователь B создал ветвь отслеживания и извлек проект, который пользователь A выдвинул как ветвь. Учитывая этот сценарий, мой вопрос - который на самом деле пытается симулировать перебазирование и оттачивать мое понимание опасностей перебазирования в силу этого вопроса - заключается в том, нужно ли пользователю B объединяться с веткой, связанной с любым пользователем A, выдвинутым на удаленный хранилище?
Согласно тому, что я прочитал и понял, sha-хэш пользователя A и пользователя B в отношении их окончательной фиксации будет отличаться и, следовательно, потребует слияния, предполагая, что они оба хотят продолжить свою работу по "разработке", зная, что они синхронизированы. Я прав?
1 ответ
Вы правы, SHA-1 записывает путь (вся цепочка предков, более или менее), а git определяет, какие коммиты должны быть включены на основе узлов фиксации (DAG с необработанными SHA-1).
Если они на самом деле сливаются (или один перебазирует свои вещи на другой, выбрасывая любые "ненужные" коммиты), слияние, в конце концов, будет легким, поскольку это зависит от содержимого файла - или, более конкретно, от различий слияния -на основе каждого наконечника коммита. Любая результирующая фиксация слияния (если она собрана обоими пользователями) будет синхронизировать их графики, поскольку новые коммиты будут иметь эту новую фиксацию слияния в качестве родительского идентификатора.