GIT. Как насильно скопировать изменения из одной ветки в другую

Стою на ветке module2 и нужно перетащить в неё изменения из ветки module1

Команда git cherry-pick module1 приводит к конфликтам, которые я не могу понять как разрешить. Ещё при этом почему-то теряются файлы, которые есть в веткe module1.

Можно ли как-то насильно перетащить изменения из одной ветки в другую, что-то типа такого git cherry-pick module1 --FORCE? Сейчас единственный выход вижу в том чтобы встать на ветку module1 руками скопировать все директории с файлами в промежуточную папку. Потом вернутся в ветку module2 и руками перетащить все файлы из промежуточной папки в папку проекта.

Короче я сделал кучу работы в ветке module1. А потом выяснилось что работу нужно было вести в ветке module2. Я создал чистую ветку module2 и мне просто нужно перетащить в неё всю сделанную работу в ветке module1.


Ответы (2 шт):

Автор решения: TupoScrip

Короче, быстрее будет сделать руками.

1 Встал на ветку module1

2 Зашёл в директорию проекта и скопировал от туда целиком папку src.

3 Вернулся обратно на ветку module2

4 Удалил папку src и вместо неё вставил папку src c нужными изменениями из ветки module1.

5 Закоммитил изменения.

Единственный минус такого подхода, что история добавления фич осталось вся в ветке module1. А в ветке module2 сейчас один коммит в котором собрана куча изменений.

→ Ссылка
Автор решения: AlexGlebe

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 может быть запрещена, если ваша ветка удалённая на сервере.

→ Ссылка