GIT. Как насильно скопировать изменения из одной ветки в другую
Стою на ветке module2 и нужно перетащить в неё изменения из ветки module1
Команда git cherry-pick module1 приводит к конфликтам, которые я не могу понять как разрешить. Ещё при этом почему-то теряются файлы, которые есть в веткe module1.
Можно ли как-то насильно перетащить изменения из одной ветки в другую, что-то типа такого
git cherry-pick module1 --FORCE?
Сейчас единственный выход вижу в том чтобы встать на ветку module1 руками скопировать все директории с файлами в промежуточную папку.
Потом вернутся в ветку module2 и руками перетащить все файлы из промежуточной папки в папку проекта.
Короче я сделал кучу работы в ветке module1. А потом выяснилось что работу нужно было вести в ветке module2. Я создал чистую ветку module2 и мне просто нужно перетащить в неё всю сделанную работу в ветке module1.
Ответы (2 шт):
Короче, быстрее будет сделать руками.
1 Встал на ветку module1
2 Зашёл в директорию проекта и скопировал от туда целиком папку src.
3 Вернулся обратно на ветку module2
4 Удалил папку src и вместо неё вставил папку src c нужными изменениями из ветки module1.
5 Закоммитил изменения.
Единственный минус такого подхода, что история добавления фич осталось вся в ветке module1. А в ветке module2 сейчас один коммит в котором собрана куча изменений.
m1 == ветка module1 , m2 == ветка module2 , m3 == ветка module3 , old == коммиты старые , new == коммит новый
old1 -- new : m1
old2 : m2
Сначала создаём ветку module3 на месте нового кода.
git checkout master1
git branch master3
old1 -- new : m1 , m3
old2 : m2
Потом переносим указатель module1 назад.
git checkout master1
git reset --hard old1
old1 : m1 -- new : m3
old2 : m2
Дальше уже перенос ветки module3 на другую module2.
git checkout module3
git rebase module2
old1 : m1
old2 : m2 -- new : m3
Подтягиваем ветку module2 вперёд к новому модулю module3.
git checkout module2
git pull module3
old1 : m1
old2 -- new : m2 , m3
Сложность переноса зависит сильной разницы веток module1 и module2. И команда rebase --hard может быть запрещена, если ваша ветка удалённая на сервере.