Skip to content

Conflicts

Как разрешить конфликты при мерже:

  1. Получить изменения из оригинального репозитория (upstream):
git fetch upstream
  1. Попытаться слить изменения с вашей веткой:

Если ваша основная ветка называется main, выполните:

git merge upstream/main

Если есть конфликты, Git остановится и покажет файлы с конфликтами.

  1. Разрешить конфликты:

Конфликтные файлы будут отмечены специальными маркерами. Git покажет вам разницу между вашей версией и версией из upstream. Например:

<<<<<<< HEAD
// Ваши изменения
=======
// Изменения из upstream
>>>>>>> upstream/main

Вам нужно вручную решить, какие изменения оставить, а какие — откатить или объединить.

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

Когда вы разрешите все конфликты, выполните:

git add <файлы с конфликтами>
  1. Завершить слияние:

После того как вы добавили все исправленные файлы, завершите процесс слияния с помощью коммита:

git commit

Git автоматически создаст сообщение коммита, включающее информацию о слиянии. Вы можете отредактировать это сообщение по желанию.

  1. Отправить изменения на GitLab:

После успешного разрешения конфликтов и завершения слияния, отправьте изменения в ваш форк на GitLab:

git push gitlab main

Альтернативный вариант: Rebase

Вместо merge, можно использовать rebase. Это иногда делает историю коммитов более чистой. Пример:

  1. Получить изменения из upstream:
git fetch upstream
  1. Выполнить rebase:
git rebase upstream/main

Если возникнут конфликты, процесс будет аналогичен, но после их разрешения нужно будет использовать git rebase --continue.

  1. После завершения rebase, отправьте изменения:
git push gitlab main --force-with-lease

Здесь флаг --force-with-lease используется, чтобы избежать перезаписи данных, если кто-то ещё внёс изменения в ваш репозиторий.

Важно:

Перед тем как начать слияние или rebase, рекомендуется создать резервную ветку на случай, если что-то пойдет не так:

git checkout -b backup-branch

Таким образом, вы сможете вернуть предыдущие изменения в любой момент.