#10 Git — Учимся мержить ветки
В этом видеоуроке мы научимся мержить (мержить, merge — осуществлять слияние) ветки в Git.
На текущий момент у нас есть две ветки (master и new_f) в которых имеются различные модификации кода.
Наша цель — перенести изменения из ветки new_f в ветку master. То есть слить их, смержить.
Для этого нам надо находиться в ветке new_f. Так как это побочная ветка и проще сначала получить в нее изменения из master, протестировать и затем залить в master. Тем самым мы не затронем главную ветку и все конфликты решим в ветке new_f. А ветка master получит изменения быстро и без конфликтов (помним что это главная ветка проекта и с ней могут работать другие разработчики, по этому конфликтные ситуации лучше свести к минимуму).
Переходим в ветку new_f
git checkout new_f
В данной ситуации мы знаем заранее что нас ждет конфликт при слиянии. И сейчас мы позаботимся о том чтобы разрешить конфликт наиболее простым способом и после этого начнем мержить.
Укажем Git-у с помощью какой утилиты будем осуществлять слияние веток и разрешение конфликтов:
git config —global merge.tool kdiff3
Утилита kdiff3. Тем кто проходил мой курс по Mercurial Hg эта утилита будет знакома.
Далее с помощью команды merge запускаем операцию слияния веток:
git merge master
После команды merge указываем с какой веткой надо осуществить слияние.
После запуска мы видим что у нас имеет место конфликт изменений (как вы помните из прошлого видео — мы и в ветке new_f и в ветке master модифицировали один и тот же файл и изменения были на одной и той же строке. По этому kdiff не может принять автоматическое решение какая модификация верная и предоставляет это сделать нам).

Скажем Гит-у запустить утилиту для мержа которая у нас прописана в конфиге.
Если у вас в системе не был установлен kdiff3, либо он установлен но не прописаны системные переменные, то мы получим ошибку:

Установим kdiff3 — http://kdiff3.sourceforge.net/
Процесс установки не сложен, по этому текстом описывать не буду — смотрим в видео.
После успешной установки kdiff3 выполним команду:
git config —global mergetool.kdiff3cmd ‘»D:\\Program Files\\KDiff3\\kdiff3″ $BASE $LOCAL $REMOTE -o $MERGED’

Посмотрим что у нас попало в файл настроек:

После того как мы настроили утилиту для слияния kdiff3, можно приступать к самому слиянию веток в Git.
Выполняем команду:
После выполнения команды у нас запускается kdiff3 в котором мы можем разрешить конфликт и сохранить те изменения которые нам необходимы.
Главное окно kdiff имеет 4 окна с вариантами кода. Смотрим слева на право и с верху в низ.
Первое окно — общий предок конфликтного файла (что было до того как появились первые изменения). В данном случае index.php
Второе окно — изменения которые у нас находятся в локальной ветке. В нашим случае ветка new_f.
Третье окно — изменения в ветке которую мы принимаем. В нашем случае это ветка master.
Четвертое окно — результирующий файл — что мы получим в результате слияния.
Далее и более подробно смотрим в видео.
- ← #9 Git — Создание веток. Практика
- #11 Git — Репозиторий на GitHub →
Как слить ветки в git
Блог веб разработки статьи | видеообзоры | исходный код

Слияние веток GIT

Всем доброго времени суток и погнали! Допустим у нас есть две ветки master и new_branch и мы хотим их объединить вместе со всеми внесенными в них изменениями.
Для этого выберем ветку где мы хотим чтобы у нас происходило сведение изменений.
git checkout master
Здесь я выбрал основную ветку ‘master’ и именно в нее будут записаны все изменения двух веток. Давайте проверим:
git log --oneline --decorate
С помощью данной команды мы проверяем в какой ветке мы находимся. В моем случае это master(HEAD->master).
Все готово к началу объединения(слияния) веток между собой, для этого мы выполняем следующую команду:
git merge new_branch
где git merge — команда для объединения веток, а new_branch -название ветки изменения которой мы хотим объединить с текущей веткой. Напомню что мы находимся в ветке master. После выполнения данной команды у нас в ветке master будет создан новый коммит в котором будут объединены все изменения двух веток(master, new_branch).
Теперь после объединения веток мы можем избавиться от ветки new_branch, так как ее изменения сохранены в ветке master. Для этого удалим ее:
git branch -d new_branch
после выполнения данной команды ветка ‘new_branch’ будет удалена. Но все же сам процесс объединения двух веток может порождать конфликты. Когда вы в одной и той же части файла в каждой из веток внесли разные изменения. В этом случае системе контроля нужно будет определиться какие изменения ей утвердить.
Характерным обозначением что у вас при слиянии веток произошел конфликт являются подобные обозначения
Статьи
- datalist HTML
- Компоненты php
- Три полезных метода для работы с объектами в javaScript
- библиотека tkinter
- Генерация строк php
- User select css
- details html
- wget python
- out of range
Комментарии
Внимание. Комментарий теперь перед публикацией проходит модерацию
Все комментарии отправлены на модерацию
© 2017-2024 webfanat.com Все права защищены.

Запись экрана
Данное расширение позволяет записывать экран и выводит видео в формате webm
Добавить приложение на рабочий стол
29. Слияние в ветку main
Поскольку последний коммит в main предшествует последнему коммиту ветки style , Git может выполнить ускоренное слияние, просто переместив указатель ветки вперед, на тот же коммит, что и ветка style .
При ускоренном слиянии конфликты не возникают. Кроме того, при ускоренном слиянии не создается фиксация слияния.
02 Просмотрите логи
Выполните
git log --all --graph
Результат
$ git log --all --graph * 39a1e0f 2023-11-28 | Renamed hello.html; moved style.css (HEAD -> main, style) [Alexander Shvets] * 23149b5 2023-11-28 | Included stylesheet into hello.html [Alexander Shvets] * b9e6de1 2023-11-28 | Added css stylesheet [Alexander Shvets] * 85c14e9 2023-11-28 | Added meta title [Alexander Shvets] * ee16740 2023-11-28 | Added README [Alexander Shvets] * 9288a33 2023-11-28 | Added copyright statement with email [Alexander Shvets] * b7614c1 2023-11-28 | Added HTML header (tag: v1) [Alexander Shvets] * 46afaff 2023-11-28 | Added standard HTML page tags (tag: v1-beta) [Alexander Shvets] * 78433de 2023-11-28 | Added h1 tag [Alexander Shvets] * 5836970 2023-11-28 | Initial commit [Alexander Shvets]
Теперь ветки style и main идентичны.
Как объединить ветки в git
Я случайно создал новую ветку через checkout и закоммитился в нее. В этом коммите все самые актуальные изменения, как мне перенести их в главную ветку, чтобы потом с этой одной веткой работать? P.S. Сорри за нубский вопрос
Edit 1
Отслеживать
Amazing User
задан 26 июн 2017 в 18:18
Amazing User Amazing User
741 1 1 золотой знак 11 11 серебряных знаков 28 28 бронзовых знаков
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Из главной ветки выполнить: git merge vasha-vetka
Отслеживать
ответ дан 26 июн 2017 в 18:20
5,970 3 3 золотых знака 22 22 серебряных знака 44 44 бронзовых знака
Добавил скриншот. Были неразрешенные конфликты, я их разрешил, сделал merge, но оно до сих пор в ту же второстепенную ветку лезет. И говорит, что теперь еще больше неразрешенных конфликтов
26 июн 2017 в 18:28
@dmitrykozyr на скиншоте вы сделали не то, что вам посоветовали в ответе