Задать вопрос
@JustMoose
Программист. Радиолюбитель. Прокрастинатор ;)

Как перенести код из одной ветки в другую?

Всем привет.
У меня есть проект. В нём есть (условно) три ветки: релизная ветка, плюс две ветки с фичами.
Процесс разработки идёт так: я что-то правлю в фичёвой ветке, потом вмёрживаю её в релизную, собираю проект.

Сейчас понадобилось перекинуть немного кода из одной фичёвой ветки в другую.
Что я сделал:
нашёл нужный код, вырезал из фиче-ветки-1, закоммитил;
вставил этот же самый код в фиче-ветку-2, закоммитил;
влил обе ветки в релизную, поправил конфликты.

Вопроса два:
почему это работает плохо?
как это делать правильно?

Что плохо:
много конфликтов;
для папок это не работает совсем (то есть, если я удалил из одной ветки файл целиком, а в другой ветке добавил его же, то в релизную ветку это не попадёт вовсе, то есть, мёрж эту папку/файл не видит).

ЗЫ: Предвосхищая вопрос "а зачем ты так делаешь": я бы с радостью не делал так, но руководство очень хочет, чтобы я перетащил код из одной ветки в другую.
ЗЗЫ: Отделить конкретный коммит, в котором есть код, и переносить покоммитно не получается. Потому что код добавлялся понемногу и вперемешку (то есть, в коммит мог попасть и не относящийся к фиче код).
  • Вопрос задан
  • 3111 просмотров
Подписаться 2 Простой Комментировать
Решения вопроса 2
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Гит так не работает.

Вы похоже рассматриваете ветки как простое хранилище файлов. Но нужно мыслить не файлами а изменениями. Важно не конкретное состоянии файлов, а их отличие от корневой ветки. И переносить тогда лучше коммиты целиком — изменения, удаляя их из одной ветки и добавляя в другой.

нашёл нужный код, вырезал из фиче-ветки-1, закоммитил;

Этим вы сами сообщили гиту а том, что код нужно удалить, что он и выполнил при слиянии. Какие к нему претензии?

Возможно помогло бы склеивание ветки (squash) при слиянии. Чтобы факт удаления файлов в принципе не появлялся в истории ветки.

Я бы в таком случае разбил коммиты на более мелкие и пересобрал ветки в нужных конфигурациях. Это удобно делать в нормальных GUI-клиентах, например в SmartGit.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
почему это работает плохо?
Потому что "в коммит мог попасть и не относящийся к фиче код".

как это делать правильно?
Делать атомарные коммиты - все изменения в коммите должны быть жёстко связаны друг с другом, коммиты должны быть максимально мелкие и частые. А процесс переноса делайте через cherry-pick.
Ответ написан
Krasnodar_etc
@Krasnodar_etc
fundraiseup
Просто мерж одной фиче-ветки в другую не подходит?

Не делайте огромных перемешанных коммитов и будет вам счастье (cherry-pick)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы