[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-git-kak-razreshit-konflikt-pri-merge-rebase":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":17,"progress":18,"seo":19},1331,"kak-razreshit-konflikt-pri-merge-rebase",44,"git","Git","📦","Как разрешить конфликт при merge\u002Frebase?","Конфликт — это ситуация, когда Git не может автоматически объединить изменения в одних и тех же строках файла из разных веток.\n\n> Аналогия из жизни: два редактора одновременно правят один и тот же абзац статьи. Когда правки нужно объединить, редактор-координатор (вы) должен решить, чью версию оставить или как совместить обе.\n\n### Маркеры конфликта\n\nПри конфликте Git помечает проблемные участки в файле специальными маркерами:\n\n```java\npublic class UserService {\n\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD\n    private final AuthService authService;\n    private final UserRepository userRepo;\n=======\n    private final AuthenticationService authService;\n    private final UserDAO userDao;\n>>>>>>> feature\u002Frefactor-auth\n}\n```\n\n- `\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD` — начало изменений из текущей ветки\n- `=======` — разделитель\n- `>>>>>>> feature\u002F...` — конец изменений из вливаемой ветки\n\n### Процесс разрешения конфликта при merge\n\n```bash\n# 1. Начинаем merge\ngit merge feature\u002Fauth\n# CONFLICT (content): Merge conflict in src\u002FUserService.java\n\n# 2. Смотрим, какие файлы конфликтуют\ngit status\n# both modified: src\u002FUserService.java\n\n# 3. Открываем файл и вручную редактируем — убираем маркеры, оставляем нужный код\n\n# 4. Добавляем исправленные файлы\ngit add src\u002FUserService.java\n\n# 5. Завершаем merge\ngit commit\n# Git автоматически подставит сообщение о merge\n```\n\n### Процесс разрешения конфликта при rebase\n\n```bash\n# 1. Начинаем rebase\ngit rebase main\n# CONFLICT in src\u002FUserService.java\n\n# 2. Разрешаем конфликт в файле\n\n# 3. Добавляем исправленный файл\ngit add src\u002FUserService.java\n\n# 4. Продолжаем rebase (НЕ commit!)\ngit rebase --continue\n\n# Если возникнут конфликты в следующем коммите — повторяем шаги 2-4\n```\n\n### Отмена merge\u002Frebase\n\n```bash\n# Отменить merge (вернуться к состоянию до merge)\ngit merge --abort\n\n# Отменить rebase (вернуться к состоянию до rebase)\ngit rebase --abort\n```\n\n### Использование mergetool\n\n```bash\n# Запустить визуальный инструмент для разрешения конфликтов\ngit mergetool\n\n# Настроить инструмент по умолчанию\ngit config --global merge.tool vimdiff\n# Или для IntelliJ IDEA:\ngit config --global merge.tool intellij\n```\n\n### Стратегии выбора при конфликте\n\n```bash\n# Принять все изменения из нашей ветки\ngit checkout --ours src\u002FUserService.java\n\n# Принять все изменения из вливаемой ветки\ngit checkout --theirs src\u002FUserService.java\n```\n\n### Ключевые моменты\n\n- При rebase конфликт может возникать на каждом коммите (так как коммиты применяются по одному), при merge — один раз\n- Команда `git rebase --continue` продолжает rebase после разрешения конфликта. Не используйте `git commit` при rebase\n- Использование `--ours` и `--theirs` полностью заменяет файл одной из версий — используйте аккуратно\n- Всегда проверяйте результат разрешения конфликта — компиляция и тесты должны проходить\n\n### Частые ошибки\n\n- Оставлять маркеры конфликта (`\u003C\u003C\u003C\u003C`, `====`, `>>>>`) в коде — файл не скомпилируется\n- Использовать `git commit` вместо `git rebase --continue` при разрешении конфликта во время rebase\n- Принимать «свою» версию целиком без анализа — можно потерять чужие изменения\n- Не запускать тесты после разрешения конфликтов\n\n### Как используется в 2026\n\n- IDE (IntelliJ IDEA, VS Code) предоставляют удобный трёхпанельный интерфейс для разрешения конфликтов\n- AI-ассистенты помогают анализировать и предлагать варианты разрешения конфликтов\n- Merge queues в GitHub\u002FGitLab автоматически перебазируют и проверяют ветки перед merge, минимизируя конфликты\n- Частые маленькие PR и trunk-based development снижают вероятность конфликтов\n\n> **На собеседовании:** интервьюер проверяет практический опыт. Опишите пошаговый процесс: увидеть конфликт в `git status`, открыть файл, убрать маркеры, `git add`, `git commit` (merge) или `git rebase --continue` (rebase). Упомяните `--abort` для отмены и что при rebase конфликты могут возникать на каждом коммите.","","middle",[7,15,16],"branching","commands",[],null,{"title":20,"description":21,"ogTitle":22,"ogDescription":23,"keywords":24,"schemaAnswer":34,"featuredSnippetReady":35},"Как разрешить конфликт при merge\u002Frebase — Gymterview","Пошаговое разрешение конфликтов Git: маркеры конфликта, процесс при merge и rebase, отмена через --abort, mergetool, стратегии --ours\u002F--theirs.","Разрешение конфликтов в Git: merge и rebase — Gymterview","Пошаговый процесс разрешения конфликтов при merge и rebase: маркеры, git add, commit\u002Fcontinue, abort. Инструменты и стратегии.",[25,26,27,28,29,30,31,32,33],"конфликт Git","merge conflict","маркеры конфликта","git merge --abort","git rebase --continue","mergetool","ours","theirs","собеседование","Конфликт возникает при изменении одних строк в разных ветках. Git помечает конфликтные участки маркерами (\u003C\u003C\u003C\u003C\u003C\u003C\u003C HEAD, =======, >>>>>>>). При merge: редактируем файл, git add, git commit. При rebase: редактируем, git add, git rebase --continue (не commit!). Отмена: --abort. При rebase конфликт может возникать на каждом коммите. Стратегии: --ours\u002F--theirs для полной замены.",true]