Ошибка 1 (КРИТИЧНО): find ... rm -rf .git при миграции в monorepo
⚠️ ОПАСНО: find . -type d -name ".git" -exec rm -rf {} +
Эта команда удаляет директории
«Мы потеряем коммиты в индивидуальных репозиториях, так как удаляется .git вместе с содержимым» — из лекции.
Обязательно перед выполнением:
1. Проверить что именно будет удалено:
2. Создать резервные копии всех репозиториев:
3. Убедиться, что вы находитесь в правильной директории (
Восстановление невозможно без предварительной резервной копии.
Эта команда удаляет директории
.git во всех поддиректориях. После выполнения вы безвозвратно потеряете всю историю коммитов во всех вложенных репозиториях — коммиты, ветки, теги, метаданные.«Мы потеряем коммиты в индивидуальных репозиториях, так как удаляется .git вместе с содержимым» — из лекции.
Обязательно перед выполнением:
1. Проверить что именно будет удалено:
find . -type d -name ".git" (без -exec)2. Создать резервные копии всех репозиториев:
git bundle create repo.bundle --all3. Убедиться, что вы находитесь в правильной директории (
pwd), а не в корне файловой системыВосстановление невозможно без предварительной резервной копии.
Ошибка 2: Оставить маркеры конфликта в файле
Проблема: незакрытый конфликт
После разрешения конфликта вы случайно оставили маркеры в файле:
После разрешения конфликта вы случайно оставили маркеры в файле:
# НЕПРАВИЛЬНО — файл с оставленными маркерами:
function processData(data) {
<<<<<<< HEAD
return data.filter(item => item.active);
=======
return data.filter(item => item.enabled);
>>>>>>> feature-branch
}
Если это Python-скрипт, bash-скрипт или любой другой исполняемый файл — он упадёт с синтаксической ошибкой. Если это конфигурационный файл — приложение не запустится.
Решение: Всегда проверяйте файл после разрешения конфликта. Git может помочь:
# Найти незакрытые маркеры конфликта
grep -rn "^<<<<<<<" .
grep -rn "^=======$" .
grep -rn "^>>>>>>>" .
Ошибка 3: Забыть git add перед merge --continue
# ПЛОХО — разрешили конфликт, но не добавили файл
nano merge.txt # убрали маркеры
git merge --continue
# fatal: There is no merge in progress; did you forget to call git merge?
# или
# error: Committing is not possible because you have unmerged files.
# ПРАВИЛЬНО
nano merge.txt # разрешить конфликт
git add merge.txt # пометить как разрешённый
git merge --continue # завершить слияние
Ошибка 4: Не использовать git status для диагностики
После git merge с конфликтом многие сразу пытаются исправить файлы, не посмотрев git status.
# ВСЕГДА начинать диагностику с:
git status
# On branch main
# You have unmerged paths.
# Unmerged paths:
# both modified: merge.txt
# both modified: another-file.py
# Это покажет ВСЕ конфликтующие файлы — их может быть несколько!
Ошибка 5: merge --abort вместо разрешения
Если что-то пошло не так в процессе разрешения конфликта — можно отменить весь merge:
# Отменить незавершённое слияние и вернуться в состояние до merge
git merge --abort
# После этого можно попробовать снова с другой стратегией
Но это не решение — конфликт никуда не делся. Нужно разрешать его, а не избегать.