Как поддерживать ветки в актуальном состоянии и разрешать конфликты слияния в GitHub и VS Code
Хей {имя пользователя}, мы уже объединили пул-запрос до вашего. Пожалуйста, решите конфликты слияния, чтобы мы могли просмотреть и объединить ваш пул-запрос. Вы когда-нибудь получали такое сообщение от поддерживающего, ожидая просмотра и объединения вашего пул-запроса? И тогда, вы паникуете, потому что
Привет {username}, мы слиты PR до вашего. Пожалуйста, разрешите конфликты слияния, чтобы мы могли просмотреть и объединить ваш PR.
Когда-нибудь получали такое сообщение от поддерживающего, пока ждали, чтобы ваш запрос на слияние был просмотрен и объединен? И потом, вы паникуете, потому что не знаете, что делать? Или, может быть, вы думаете закрыть свой запрос на слияние, пересоздать все с нуля и открыть новый запрос на слияние?
Что ж, хорошая новость в том, что вы не один.
В этой статье я покажу вам, как держать ваш удаленный и локальный бранчи в актуальном состоянии. Я также проведу вас через разрешение конфликтов слияния в GitHub и VS Code.
Содержание
- Предварительные условия
- Понимание конфликтов слияния
- Как держать бранчи в актуальном состоянии
- Как разрешить конфликты слияния
- Последние слова
Предварительные условия
Чтобы следовать этому руководству, вам понадобятся следующие компоненты:
Понимание конфликтов слияния
Конфликты слияния обычно возникают, когда две коммита имеют изменения в одной и той же строке(ах) одного и того же файла(ов) в двух разных бранчах. Иногда это может произойти, когда кто-то редактирует файл, а кто-то его удаляет.
Дело в том, что Git не может самостоятельно разрешить конфликт. Он нуждается в вашей помощи, чтобы решить, какие изменения следует оставить.
Когда возникает конфликт слияния, в вашем запросе на слияние на GitHub вы увидите уведомление о том, что имеются конфликты, которые необходимо разрешить. Поддерживающие не могут объединять запрос на слияние, когда возникают конфликты слияния. Это потому, что кнопка объединения неактивна до разрешения конфликтов.
Как держать бранчи в актуальном состоянии
Держать ваши бранчи в актуальном состоянии крайне важно. Регулярное обновление вашего удаленного и локального бранчей main
и рабочих веток настоятельно рекомендуется.
Лучшее время для обновления ваших бранчей:
- перед созданием нового бранча для работы над задачей,
- после фиксации последних изменений и перед их отправкой в удаленный репозиторий,
- во время ожидания рассмотрения вашего запроса на слияние.
Если ваш запрос на слияние был объединен в то время, когда вы ждете, пока рассмотрят ваш, в запросе на слияние появится предупреждение. В нем вам сообщается, что ваш бранч отстает от основного бранча (upstream
) репозитория.
Как обновить основной бранч в вашем форкнутом репозитории
- Перейдите к вашему форкнутому репозиторию на GitHub.
- Нажмите кнопку “Sync fork”.
- Нажмите зеленую кнопку “Update branch”.
После обновления ветки вы увидите уведомление сверху о том, что ваша ветка обновлена.
Как обновить локальную ветку
Теперь ваша удаленная ветка main
обновлена. Обновим локальную ветку из терминала.
Шаг №1 – Перейдите к своей рабочей ветке
В терминале перейдите к своей рабочей ветке с помощью этой команды:
git checkout название-ветки
Шаг №2 – Выгрузите изменения
Выгрузите последние изменения из ветки main
вашего удаленного (форкнутого) репозитория origin
в вашу локальную ветку.
git pull origin main
Шаг №3 – Отправьте изменения
Отправьте эти изменения в вашу удаленную ветку. Если вам нужно разрешить конфликты, вы должны их исправить перед отправкой изменений.
git push
Как разрешить конфликты слияния
Вы можете начать разрешать конфликты слияния только после того, как ваша рабочая ветка будет обновлена. Есть два способа разрешения конфликтов:
- На GitHub
- В вашем среде разработки (VS Code)
1. Разрешение конфликтов слияния на GitHub
Разрешение конфликтов напрямую на GitHub возможно только в случае, если причиной конфликтов являются изменения в одинаковых строках тех же файлов двух разных веток. В остальных случаях вы должны разрешить их локально в вашем редакторе кода.
Следуйте этим шагам, чтобы разрешить конфликты напрямую на GitHub:
Шаг №1 – Нажмите кнопку “Разрешить конфликты”
Сначала перейдите к репозиторию upstream
на GitHub. Затем перейдите на вкладку “Pull request”. Найдите и откройте ваш pull request и прокрутите вниз.
К концу вы найдете кнопку “Разрешить конфликты”.
Шаг №2 – Внимательно изучите конфликты
После нажатия кнопки “Разрешить конфликты” вы будете перенаправлены в редактор конфликтов GitHub.
Слева в боковой панели вы можете увидеть файл(ы), в которых есть конфликты. В верхней панели вы найдете количество конфликтов в файле. В самом файле есть маркеры конфликта <<<<<<<
, =======
и >>>>>>>
.
Строки между <<<<<<< название-ветки
и =======
– это ваши изменения. Любые строки между =======
и >>>>>>> main
– это изменения из ветки main
репозитория upstream
.
Вам необходимо просмотреть конфликты и решить, какие из них вы хотите сохранить или если вам нужно внести полностью новые изменения.
Шаг #3 – Разрешение конфликтов
После того, как вы решите, как вы хотите разрешить конфликты, удалите маркеры конфликта <<<<<<<
, =======
, >>>>>>>
. Затем вы можете внести изменения. Если в файле есть несколько конфликтов, прокрутите вниз и разрешите их перед тем, как отмечать их как разрешенные.
После того, как вы разрешили все конфликты, нажмите кнопку “Отметить как разрешенное” в верхней панели.
Если в другом(их) файле(ах) есть конфликты, перейдите к файлу, нажав на его имя в левой боковой панели. Затем повторите те же шаги для разрешения конфликтов.
Шаг #4 – Нажмите кнопку “Зафиксировать слияние”
После того, как все конфликты во всех конфликтующих файлах будут отмечены как разрешенные, в правом верхнем углу появится зеленая кнопка “Зафиксировать слияние”. Нажмите на кнопку, чтобы зафиксировать ваши изменения.
2. Разрешение конфликтов слияния в VS Code
После того, как вы получили последние изменения из ветки main
вашего форкнутого репозитория, вы увидите строки между маркерами конфликта <<<<<<<
, =======
и >>>>>>>
.
Вы также увидите варианты для разрешения конфликтов:
- Принять текущее изменение: Когда вы хотите оставить только свои изменения.
- Принять входящее изменение: Когда вы хотите оставить только изменения из ветки
main
. - Принять оба изменения: Когда вы хотите оставить свои и входящие изменения.
Строки между <<<<<<< HEAD (Текущее изменение)
и =======
– это ваши изменения. И все, что находится между =======
и >>>>>>> hash-номера (Входящее изменение)
– это изменения из ветки main
вашего форкнутого репозитория.
Следуйте этим шагам для разрешения конфликтов в VS Code:
Шаг #1 – Разрешение конфликтов
Тщательно рассмотрите конфликты между маркерами конфликта. Затем вам нужно решить, как вы хотите разрешить конфликты.
- Вы можете вручную удалить маркеры
<<<<<<<
,=======
,>>>>>>>
и внести изменения.
ИЛИ
- Вы можете выбрать и нажать один из вариантов принятия в верхней части и изменить изменения в соответствии со своими потребностями.
Отменить слияние
Если в какой-то момент вы почувствуете себя запутанным и захотите отменить слияние и начать все сначала, выполните команду git merge --abort
перед фиксацией ваших изменений. Она прервет слияние и вернет ваш файл в состояние перед конфликтами.
Шаг #2 – Зафиксировать ваши изменения
После того, как вы завершили разрешение конфликтов, вы должны зафиксировать ваши изменения. Выполните эту команду, чтобы автоматически проиндексировать и зафиксировать изменения:
git commit -am "Ваше сообщение"
Понимание команды git commit -am
Команда git commit -am
отличается от выполнения команды git add .
за которой следует команда git commit -m
.
Запуск команды git add .
добавит все файлы (включая недавно созданные файлы) в область подготовки. Если добавить флаг -a
в команду git commit
, он автоматически подготовит любые файлы, которые вы уже ранее зафиксировали. Это включает подготовку удаленных отслеживаемых файлов, но не подготовку недавно созданных файлов.
Таким образом, комбинация флагов -a
и -m
в команде git commit
позволяет пропустить этап подготовки и непосредственно написать сообщение к фиксации.
Шаг 3 – Отправьте ваши изменения
Теперь вы можете отправить ваши изменения на удаленную ветку следующей командой:
git push
Последние слова
Если вам понравилась и вы нашли эту статью полезной, пожалуйста, поделитесь ей с другими. Вы можете найти другие работы на моем блоге, и давайте свяжемся на X (ранее Twitter) или LinkedIn.
Leave a Reply