Разрешение конфликта слияния с помощью Git Stash
Один из наиболее распространенных и полезных способов разрешения ошибки "Your local changes would be overwritten by merge" (Ваши локальные изменения будут перезаписаны при слиянии) - это использование git stash. Команда git stash временно сохраняет ваши незафиксированные изменения, чтобы вы могли применить их позже.
Что такое Git Stash
git stash - это команда Git, которая берет ваши незафиксированные изменения (как подготовленные, так и неподготовленные), сохраняет их для последующего использования, а затем отменяет изменения в вашей рабочей копии.
Использование Git Stash для разрешения ошибки
Давайте используем git stash, чтобы сохранить наши незафиксированные изменения:
git stash
Вы должны увидеть вывод, похожий на:
Saved working directory and index state WIP on main: xxxxxxx Initial commit
Это сообщение подтверждает, что ваши изменения были сохранены. Давайте убедимся, что наш рабочий каталог теперь чист:
git status
Вы должны увидеть:
On branch main
nothing to commit, working tree clean
Теперь давайте проверим содержимое script.js:
cat script.js
Вы должны увидеть исходное содержимое:
console.log('Hello, Git!');
Слияние ветки Development
Теперь, когда наш рабочий каталог чист, мы можем безопасно объединить ветку development:
git merge development
Вы должны увидеть:
Updating xxxxxxx..xxxxxxx
Fast-forward
script.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
Давайте снова проверим содержимое script.js:
cat script.js
Теперь вы должны увидеть:
console.log('Hello from development branch!');
Получение ваших сохраненных изменений
Теперь, когда мы успешно объединили ветку development, давайте получим наши сохраненные изменения:
git stash list
Вы должны увидеть:
stash@{0}: WIP on main: xxxxxxx Initial commit
Это показывает, что у нас есть один сохраненный stash. Давайте применим его:
git stash apply
Вы можете увидеть сообщение о конфликте:
Auto-merging script.js
CONFLICT (content): Merge conflict in script.js
Это нормально, потому что Git пытается применить ваши сохраненные изменения поверх объединенного файла. Давайте проверим содержимое script.js:
cat script.js
Вы должны увидеть что-то вроде:
<<<<<<< Updated upstream
console.log('Hello from development branch!');
=======
console.log('Hello from main branch!');
>>>>>>> Stashed changes
Это конфликт слияния, который вам нужно разрешить вручную. Откройте файл с помощью nano:
nano script.js
Отредактируйте файл, чтобы сохранить оба изменения или выбрать одно:
// Keep both changes
console.log("Hello from development branch!");
console.log("Hello from main branch!");
Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите из nano, нажав Ctrl+X.
Теперь давайте подготовим и зафиксируем разрешенный конфликт:
git add script.js
git commit -m "Merge development branch and resolve conflict"
Поздравляем! Вы успешно разрешили ошибку "Your local changes would be overwritten by merge" (Ваши локальные изменения будут перезаписаны при слиянии) с помощью git stash.