Перейти к содержимому

Как слить ветки в git

  • автор:

#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 не может принять автоматическое решение какая модификация верная и предоставляет это сделать нам).

Git - конфликт

Скажем Гит-у запустить утилиту для мержа которая у нас прописана в конфиге.

Если у вас в системе не был установлен kdiff3, либо он установлен но не прописаны системные переменные, то мы получим ошибку:

git - не установлен kdiff

Установим 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

Блог веб разработки статьи | видеообзоры | исходный код

webfanat вконтакте webfanat youtube

Слияние веток 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 на скиншоте вы сделали не то, что вам посоветовали в ответе

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *