Задать вопрос
  • Что происходит при слиянии веток (git merge)?

    Decadal
    @Decadal
    Представьте, что у вас два грузовика. Сначала они были одинаково пусты, потом вы загрузили в один грузовик пару мешков с песком, а в другой - мешок с углем.
    Условно первый грузовик - master, второй - dev.
    git checkout master
    git merge dev


    Теперь в master у нас мешки с песком и мешок с углем
    А в dev, как и прежде, только мешок с углем.

    Так что у вас не только те папки, которые в development, но и те, которые были в master.

    Если вы пушили ветку development, то при clone она тоже должна была стянуться, просто на данный момент git смотрит на master. Напишите git status чтобы проверить, в какой вы ветке, и переключитесь на нужную.
    Если ветки development нет, сначала вам предстоит её запушить.

    В случае, если в двух ветках разные файлы (не противоречащие друг другу), то merge просто размещает их все вместе, как будто вы скопировали файлы из одной ветки в другую.
    Но если в двух ветках в файлах с одинаковыми именами разное содержимое, выполняется auto-merging, т.е. попытка автоматически объединить два содержимых в одно. Эта операция успешна, например, если вы в одной из веток просто добавили в конец файла ещё одну строку, а в другой ветке не трогали файл вовсе.
    Если содержимое менялось и в той и в другой ветке, происходит конфликт. Git вставляет в место спорного контента что-то вроде
    <<<<HEAD 
    один контент
    <<< commit1111
    другой контент 
    <<<end

    Вам придётся решить, что делать с таким содержимым: что убрать а что оставить.
    После того как конфликт разрешен, вы просто коммитите свое решение, как будто бы никогда и не было двух разных версий файлов, а сразу была та версия, которую вы закоммитили в процессе решения конфликта.
    Ответ написан