---
metadata:
  - name: generator
    content: Diplodoc Platform v5.57.3
alternate:
  - https://sourcecraft.dev/portal/docs/en/sourcecraft/operations/resolve-merge-conflicts.md
  - https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/resolve-merge-conflicts.md
  - href: ru/sourcecraft/operations/resolve-merge-conflicts.md
    type: text/markdown
    title: Markdown version
  - href: ../../llms.txt
    type: text/markdown
    title: llms.txt
title: Как разрешить конфликты при слиянии веток в SourceCraft
description: Следуя данной инструкции, вы сможете разрешить конфликты, возникающие при слиянии веток в SourceCraft.
---
> **Documentation Index:** Fetch the complete configuration index at https://sourcecraft.dev/portal/docs/ru/llms.txt


# Разрешить конфликты при слиянии веток

<!-- source: ru/_includes/sourcecraft/git-conflicts.md -->
_Конфликты слияния_ возникают, когда [git](https://git-scm.com/) не может автоматически объединить изменения из разных веток. Это происходит, когда в репозитории есть противоречивые изменения, сделанные в одних и тех же местах.

Причины возникновения конфликтов:
* Одновременная работа нескольких людей над одними файлами.
* Обновление локальной копии с сервера ([`git pull`](https://sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/quickstart-git.md#fetch-repo)), когда изменения в удаленном репозитории противоречат вашим локальным правкам.
* Слияние веток ([`git merge`](https://sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/quickstart-git.md#merge-branch)), если в них были сделаны разные изменения в одних и тех же участках кода.
* Попытка отправки изменений ([`git push`](https://sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/quickstart-git.md#send-push)) в удаленный репозиторий, если в нем уже есть коммиты, противоречащие вашим локальным правкам.

Типы конфликтов:
* [Конфликты изменения строк](#resolve-cli) — наиболее распространенный тип конфликта, который возникает, когда одна и та же строка файла изменена по-разному в разных ветках.
* [Конфликты в файловой структуре (tree conflicts)](#tree-conflicts) — возникают, когда один пользователь изменяет файл, а другой его удаляет.

### Как выглядят конфликты в файлах {#conflict-markers}

Когда `git` обнаруживает конфликт, он помечает проблемные участки специальными маркерами:

```text
Общая часть текста до конфликта
<<<<<<< HEAD
Изменения в текущей ветке
=======
Изменения во входящей ветке
>>>>>>> branch-name
```

Где:
* `<<<<<<< HEAD` — начало изменений в текущей ветке.
* `=======` — разделитель между версиями.
* `>>>>>>> branch-name` — конец изменений из входящей ветки.

### Разрешение конфликтов {#resolve}

{% list tabs group=instructions %}

- Интерфейс SourceCraft {#src}

  <iframe width="640" height="360" src="https://runtime.strm.yandex.ru/player/video/vplvor2l7ieyypvhqrjh?autoplay=0&mute=0" allow="autoplay; fullscreen; picture-in-picture; encrypted-media" frameborder="0" scrolling="no"></iframe>

  {% note warning %}

  Разрешение [конфликтов в файловой структуре](#tree-conflicts) недоступно в интерфейсе SourceCraft. Для разрешения таких конфликтов используйте командную строку или [SourceCraft Spaces](https://sourcecraft.dev/portal/docs/ru/sourcecraft/concepts/spaces.md).

  {% endnote %}

  1. Откройте [главную страницу](https://sourcecraft.dev) SourceCraft.
  1. На вкладке ![image](../../_assets/console-icons/house.svg) **Домой** в секции ![image](../../_assets/console-icons/layout-tabs.svg) **Ваша мастерская** перейдите в раздел ![image](../../_assets/console-icons/archive.svg) **Репозитории**.
  1. Выберите репозиторий.
  1. На странице репозитория в разделе ![image](../../_assets/console-icons/code.svg) **Код** перейдите в секцию ![image](../../_assets/console-icons/code-pull-request.svg) **Предложения изменений**.
  1. Выберите предложение изменений и в правом верхнем углу нажмите ![image](../../_assets/console-icons/code-pull-request.svg) **Принять**.
  1. На странице предложения изменений изучите сообщение о конфликтах, например:

      ```text
      Объединение заблокировано
      ...
      В этой ветке есть конфликты, которые нужно разрешить
      filename.js
      CONFLICT (content): Automatic merge failed to resolve conflict in filename.js; Manual content merge required
      ```

  1. Нажмите **Разрешить в интерфейсе**.
  1. Откроется интерфейс редактирования кода, где будут помечены проблемные участки специальными маркерами:

      ```text
       1    ...
       2    Общая часть текста до конфликта
       3    ...
            [Принять текущее] [Принять входящее] [Принять оба изменения]
       4    <<<<<<< main
       5    Изменения в текущей ветке
       6    =======
       7    Изменения во входящей ветке
       8    >>>>>>> feature-branch
       9    ...
      10    Общая часть текста после конфликта
      11    ...
      ```

      Где:
      * `Принять текущее`, `Принять входящее`, `Принять оба изменения` — кнопки для разрешения отдельного конфликта.
      * `<<<<<<< main` — начало изменений в текущей ветке.
      * `=======` — разделитель между версиями.
      * `>>>>>>> feature-branch` — конец изменений из входящей ветки.

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

      * Чтобы разрешить отдельный конфликт, нажмите возле проблемного участка:
          * **Принять текущее** — принять изменения из текущей ветки.
          * **Принять входящее** — принять изменения из входящей ветки.
          * **Принять оба изменения** — принять изменения из обеих веток.

      * Чтобы разрешить все конфликты, справа вверху нажмите:
          * **Принять текущий** — принять все изменения из текущей ветки.
          * **Принять входящий** — принять все изменения из входящей ветки.

          {% note warning %}

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

          {% endnote %}

  1. Нажмите **Пометить решенным** и **Сохранить изменения**.

- Командная строка {#cli}

  1. Определите файлы с конфликтами, выполнив команду:

      ```bash
      git status
      ```

      Файлы с конфликтами отобразятся с пометкой `both modified`.
  1. Откройте файл с конфликтом в текстовом редакторе.
  1. Найдите маркеры конфликта (`<<<<<<<`, `=======`, `>>>>>>>`).
  1. Выберите вариант решения конфликта:
      * Удалите ненужную версию.
      * Создайте новый код, объединяющий обе версии.

      После внесения изменений удалите все маркеры конфликта.
  1. Сохраните файл.
  1. Добавьте измененный файл в индекс:

      ```bash
      git add <имя_файла>
      ```

  1. Завершите слияние:

      ```bash
      git commit -m "Resolve merge conflict"
      ```

  1. Опубликуйте изменения:
      
      ```bash
      git push
      ```

{% endlist %}

### Конфликты в файловой структуре (tree conflicts) {#tree-conflicts}

Чтобы разрешить конфликт, когда файл был изменен в одной ветке и удален в другой:
1. Посмотрите статус конфликта:

    ```bash
    git status
    ```

1. Выберите дальнейшее действие с файлом:
    * Чтобы оставить файл, выполните команду:

      ```bash
      git add <имя_файла>
      ```

    * Чтобы удалить файл, выполните команду:

      ```bash
      git rm <имя_файла>
      ```

1. Завершите слияние:

    ```bash
    git commit -m "Resolve file deletion conflict"
    ```

### Использование инструментов слияния {#merge-tools}

Для удобного разрешения конфликтов можно использовать графические инструменты.
Чтобы запустить настроенный инструмент слияния, например VS Code, Sublime Merge или другие, выполните команду:

```bash
git mergetool
```

### Прерывание слияния {#abort-merge}

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

```bash
git merge --abort
```
<!-- endsource: ru/_includes/sourcecraft/git-conflicts.md -->

#### Полезные ссылки {#see-also}

* [Как начать работать с git](https://sourcecraft.dev/portal/docs/ru/sourcecraft/tutorials/quickstart-git.md)
* [Работа с предложениями изменений в SourceCraft](https://sourcecraft.dev/portal/docs/ru/sourcecraft/operations/pr-work.md)
* [Официальная документация git по разрешению конфликтов](https://git-scm.com/docs/git-merge#_how_to_resolve_conflicts)
