Как поддерживать ветки в актуальном состоянии и разрешать конфликты слияния в GitHub и VS Code

Хей {имя пользователя}, мы уже объединили пул-запрос до вашего. Пожалуйста, решите конфликты слияния, чтобы мы могли просмотреть и объединить ваш пул-запрос. Вы когда-нибудь получали такое сообщение от поддерживающего, ожидая просмотра и объединения вашего пул-запроса? И тогда, вы паникуете, потому что

Привет {username}, мы слиты PR до вашего. Пожалуйста, разрешите конфликты слияния, чтобы мы могли просмотреть и объединить ваш PR.

Когда-нибудь получали такое сообщение от поддерживающего, пока ждали, чтобы ваш запрос на слияние был просмотрен и объединен? И потом, вы паникуете, потому что не знаете, что делать? Или, может быть, вы думаете закрыть свой запрос на слияние, пересоздать все с нуля и открыть новый запрос на слияние?

Что ж, хорошая новость в том, что вы не один.

В этой статье я покажу вам, как держать ваш удаленный и локальный бранчи в актуальном состоянии. Я также проведу вас через разрешение конфликтов слияния в GitHub и VS Code.

Содержание

Предварительные условия

Чтобы следовать этому руководству, вам понадобятся следующие компоненты:

  • Учетная запись GitHub.
  • Установленный на вашем компьютере VS Code.

Понимание конфликтов слияния

Конфликты слияния обычно возникают, когда две коммита имеют изменения в одной и той же строке(ах) одного и того же файла(ов) в двух разных бранчах. Иногда это может произойти, когда кто-то редактирует файл, а кто-то его удаляет.

Дело в том, что Git не может самостоятельно разрешить конфликт. Он нуждается в вашей помощи, чтобы решить, какие изменения следует оставить.

Когда возникает конфликт слияния, в вашем запросе на слияние на GitHub вы увидите уведомление о том, что имеются конфликты, которые необходимо разрешить. Поддерживающие не могут объединять запрос на слияние, когда возникают конфликты слияния. Это потому, что кнопка объединения неактивна до разрешения конфликтов.

branch-has-conflicts
Предупреждение в запросе на слияние GitHub: Этот бранч имеет конфликты, которые необходимо разрешить

Как держать бранчи в актуальном состоянии

Держать ваши бранчи в актуальном состоянии крайне важно. Регулярное обновление вашего удаленного и локального бранчей main и рабочих веток настоятельно рекомендуется.

Лучшее время для обновления ваших бранчей:

  • перед созданием нового бранча для работы над задачей,
  • после фиксации последних изменений и перед их отправкой в удаленный репозиторий,
  • во время ожидания рассмотрения вашего запроса на слияние.

Если ваш запрос на слияние был объединен в то время, когда вы ждете, пока рассмотрят ваш, в запросе на слияние появится предупреждение. В нем вам сообщается, что ваш бранч отстает от основного бранча (upstream) репозитория.

branch-out-of-date
Предупреждение в запросе на слияние GitHub: Этот бранч устарел по сравнению с базовым бранчем.

Как обновить основной бранч в вашем форкнутом репозитории

  1. Перейдите к вашему форкнутому репозиторию на GitHub.
  2. Нажмите кнопку “Sync fork”.
  3. Нажмите зеленую кнопку “Update branch”.
update-branch
Кнопки “Синхронизировать ветку” и “Обновить ветку” на GitHub.

После обновления ветки вы увидите уведомление сверху о том, что ваша ветка обновлена.

up-to-date-branch-github
Уведомление на GitHub: Эта ветка обновлена и соответствует организации-имя/название-репозитория:main.

Как обновить локальную ветку

Теперь ваша удаленная ветка main обновлена. Обновим локальную ветку из терминала.

Шаг №1 – Перейдите к своей рабочей ветке

В терминале перейдите к своей рабочей ветке с помощью этой команды:

git checkout название-ветки

Шаг №2 – Выгрузите изменения

Выгрузите последние изменения из ветки main вашего удаленного (форкнутого) репозитория origin в вашу локальную ветку.

git pull origin main

Шаг №3 – Отправьте изменения

Отправьте эти изменения в вашу удаленную ветку. Если вам нужно разрешить конфликты, вы должны их исправить перед отправкой изменений.

git push

Как разрешить конфликты слияния

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

  1. На GitHub
  2. В вашем среде разработки (VS Code)

1. Разрешение конфликтов слияния на GitHub

Разрешение конфликтов напрямую на GitHub возможно только в случае, если причиной конфликтов являются изменения в одинаковых строках тех же файлов двух разных веток. В остальных случаях вы должны разрешить их локально в вашем редакторе кода.

Следуйте этим шагам, чтобы разрешить конфликты напрямую на GitHub:

Шаг №1 – Нажмите кнопку “Разрешить конфликты”

Сначала перейдите к репозиторию upstream на GitHub. Затем перейдите на вкладку “Pull request”. Найдите и откройте ваш pull request и прокрутите вниз.

К концу вы найдете кнопку “Разрешить конфликты”.

resolved-conflicts-button
Уведомление “Это ветка имеет конфликты, которые должны быть разрешены” и кнопка “Разрешить конфликты” на GitHub.

Шаг №2 – Внимательно изучите конфликты

После нажатия кнопки “Разрешить конфликты” вы будете перенаправлены в редактор конфликтов GitHub.

github-resolve-conflict-2
Редактор конфликтов GitHub

Слева в боковой панели вы можете увидеть файл(ы), в которых есть конфликты. В верхней панели вы найдете количество конфликтов в файле. В самом файле есть маркеры конфликта <<<<<<<, ======= и >>>>>>>.

Строки между <<<<<<< название-ветки и ======= – это ваши изменения. Любые строки между ======= и >>>>>>> main – это изменения из ветки main репозитория upstream.

Вам необходимо просмотреть конфликты и решить, какие из них вы хотите сохранить или если вам нужно внести полностью новые изменения.

Шаг #3 – Разрешение конфликтов

После того, как вы решите, как вы хотите разрешить конфликты, удалите маркеры конфликта <<<<<<<, =======, >>>>>>>. Затем вы можете внести изменения. Если в файле есть несколько конфликтов, прокрутите вниз и разрешите их перед тем, как отмечать их как разрешенные.

После того, как вы разрешили все конфликты, нажмите кнопку “Отметить как разрешенное” в верхней панели.

mark-as-resolved
Кнопка “Отметить как разрешенное” на GitHub.

Если в другом(их) файле(ах) есть конфликты, перейдите к файлу, нажав на его имя в левой боковой панели. Затем повторите те же шаги для разрешения конфликтов.

Шаг #4 – Нажмите кнопку “Зафиксировать слияние”

После того, как все конфликты во всех конфликтующих файлах будут отмечены как разрешенные, в правом верхнем углу появится зеленая кнопка “Зафиксировать слияние”. Нажмите на кнопку, чтобы зафиксировать ваши изменения.

commit-merge-btn
Кнопка “Зафиксировать слияние” на GitHub.

2. Разрешение конфликтов слияния в VS Code

После того, как вы получили последние изменения из ветки main вашего форкнутого репозитория, вы увидите строки между маркерами конфликта <<<<<<<, ======= и >>>>>>>.

Вы также увидите варианты для разрешения конфликтов:

  • Принять текущее изменение: Когда вы хотите оставить только свои изменения.
  • Принять входящее изменение: Когда вы хотите оставить только изменения из ветки main.
  • Принять оба изменения: Когда вы хотите оставить свои и входящие изменения.
merge-conflicts-vscode
Конфликты слияния в VS Code.

Строки между <<<<<<< 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

Your email address will not be published. Required fields are marked *