git merge перезаписывает содержимое - PullRequest
0 голосов
/ 13 марта 2019

Вот моя ситуация:

  • У меня есть две ветви функций A и B.

  • Я хочу объединить эти две ветви.

Я сделал следующее:

  • Создайте новую ветвь C, ответвляющуюся от A

  • Оформить заказновая ветвь C

  • запустить git merge B из командной строки

Я ожидаю, что обе ветви объединены.Если есть конфликтующие изменения в одних и тех же файлах, команда должна вызвать конфликт слияния.

Но на самом деле, есть один и тот же файл, который имеет разное содержимое в ветвях A и B, но о конфликте слияния не сообщалось.Вместо этого содержимое файла из ветви A перезаписывается содержимым файла из ветви B.

Я понятия не имею, почему не сообщалось о конфликте слияния, и меня больше беспокоит, почему содержимое файлабыл перезаписан

Любые подсказки или указатели помогут.Спасибо.

1 Ответ

1 голос
/ 13 марта 2019

Давайте разберемся, что случилось.

  • У меня есть две ветви функций A и B.

Обычно это что-то вроде этого.

           4 - 5 [A]
          /
 1 - 2 - 3 - 6 [master]
              \
               7 - 8 [B]

A и B разветвлены master.Они расходятся.

Но вы, возможно, имели это.

                 6 - 7 [B]
                /
           4 - 5 [A]
          /
 1 - 2 - 3 - 6 [master]

Здесь B ответвляется от A. B разделяет все коммиты A.Давайте предположим, что.

  • Создать новую ветвь C, ответвляющуюся от A

Создание новой ветки в Git просто создает новую метку натот же коммит, что и A.

                 6 - 7 [B]
                /
           4 - 5 [A][C]
          /
 1 - 2 - 3 - 6 [master]
  • Оформить новую ветку C
  • запустить git merge B из командной строки

Когда это происходит, Git замечает, что C является предком B. Поэтому он выполняет «ускоренную перемотку вперед», что означает, что он не беспокоится о слиянии, он просто переводит C туда, где B.

                 6 - 7 [B][C]
                /
           4 - 5 [A]
          /
 1 - 2 - 3 - 6 [master]

Если A и B изменили одни и те же файлы, может показаться, что B перезаписал изменения в A.

git log, а Github, к сожалению, сглаживает вашу историю Git, создавая ложное впечатление, что она линейна.Вы можете увидеть истинную структуру вашего хранилища с помощью git log --graph --decorate --all и проверить, соответствует ли он сценарию здесь.

...