Почему я отказываюсь объединять несвязанные истории сообщения с git

Обратите внимание, что мой вопрос не «что мне делать?», Потому что я уже читал другие вопросы о переполнении стека. Я знаю, что должен указать параметр --allow-unrelated-stories.

У меня вопрос «почему».

Вот операции, которые я проделал с git версии 2.17.0.windows.1. Обратите внимание, что эта ошибка не возникает с git версии 2.7.4 в Linux:

Сначала я создаю пустой репозиторий на gitlab. Затем у меня есть 2 пользователя на 2 разных компьютерах:

Первый пользователь:

git clone <repository_url>
cd myproject
touch file1.cpp
git add file1.cpp
git commit -m "file 1 creation"
git push origin master

Второй пользователь:

git clone <repository_url>
cd myproject
touch file2.cpp
git add file2.cpp
git commit -m "file 2 creation"
git pull

В это время у меня появляется это сообщение об ошибке:

fatal: refusing to merge unrelated histories

Я не понимаю, ПОЧЕМУ у меня появляется это сообщение об ошибке в версии git для Windows, а не в Linux ...

Спасибо


1
616
1

Ответ:

Решено

I first create an empty repository

Вот в чем проблема. Пустой репозиторий не имеет никаких коммитов, поэтому, когда каждый пользователь выполняет git commit после извлечения пустого репозитория, они создают единственную корневую фиксацию. Таким образом, когда один нажимает, а другой пытается извлечь (уже выполнив локальную корневую фиксацию Другой), Git жалуется, потому что вышестоящий общий ресурс, нет фиксируется с локальной копией. Это две совершенно разные, не связанные между собой истории.

Вы можете избежать этого, обеспечив создание и отправку начальной фиксации до того, как кто-либо другой извлечет ее (чтобы у всех был одинаковый корневой коммит), или используя --allow-unrelated-histories для обхода ошибки, о которой вы упомянули. Лично я считаю, что первый вариант лучше.


Что касается расхождения между двумя установками Git: как прокомментировал @Schwern, это поведение было добавлено в Git 2.9.