#Как выглядит неисправность
Если git merge остановился на конфликтах, Git сохраняет незавершённое слияние. Пока есть unmerged paths, commit обычным способом не завершится.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Редактировали одни и те же строкиКонфликт content | В status есть both modified | Объединить содержимое |
| Один файл удалён, другой изменёнModify/delete conflict | В status указано deleted by... | Принять согласованное решение о сохранении/удалении |
#Пошаговое устранение
- 1. Определите тип незавершённой операцииВыполните git status. Если отображается «You have unmerged paths» и указано merging, это merge. Для rebase/cherry-pick порядок завершения другой — не используйте git merge --continue без проверки.
- Только чтениеLinux · Терминал (Bash)КомандаТолько чтение.
git status
- 2. Сохраните важные несохранённые правкиСкопируйте через файловый менеджер конфликтные файлы за пределы репозитория. Убедитесь, что копии открываются и в них сохранены обе стороны конфликта.
- 3. Составьте список нерешённых файловВыполните git diff --name-only --diff-filter=U. Откройте указанные пути в редакторе; маркеры <<<<<<<, =======, >>>>>>> показывают участки, которые нужно объединить.
- Список конфликтов, без изменения данныхLinux · Терминал (Bash)КомандаСписок конфликтов, без изменения данных.
git diff --name-only --diff-filter=U
- 4. Сведите содержимое вручнуюДля каждого файла обсудите правильную бизнес-логику с автором изменений, объедините необходимые строки и удалите конфликтные маркеры. Для бинарного файла выберите нужную версию после сравнения копий. Сохраните результат и запустите тесты.
- 5. Сообщите Git, что конфликт решёнВыполните git add -- path/to/file по каждому исправленному пути. Если файл намеренно удалён, используйте git rm -- path/to/file только после согласования удаления. Проверяйте status после каждого действия.
- Git add изменяет индекс, Git status показывает оставшиеся конфликтыLinux · Терминал (Bash)С осторожностьюGit add изменяет индекс, Git status показывает оставшиеся конфликты.
git add -- path/to/filegit statusКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Завершите merge и проверьте историюКогда git status больше не показывает unmerged paths, выполните git merge --continue (может открыться редактор сообщения коммита). Если передумали, git merge --abort допустим после сохранения собственных правок, он не гарантирует идеальный откат при грязной рабочей копии.
- Меняет историю только текущей ветки; не отправляет её на серверLinux · Терминал (Bash)С осторожностьюМеняет историю только текущей ветки; не отправляет её на сервер.
git merge --continuegit log -3 --onelineКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
#Как проверить результат
При успехе git status не показывает незавершённого merge, тесты проходят и merge-коммит присутствует в истории (если был нужен). При неуспехе откройте status и разберите оставшийся путь по одному.
#Если проблема осталась
Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.