Задать вопрос
tamtakoe
@tamtakoe

Как в Git слить ветку, образованную от другой ветки, с мастером?

Имеется:
master -> m10 (указывает на коммит m10)

От m10 образована ветка (в которую сделан ряд коммитов)
server -> s15

От s15 образована ветка
experiment -> e1

Далее в server добавился новый коммит. Стало
server -> s16

Потом server был слит с master. Получилось
master -> m11

----

Нужно, сделать так чтобы ветка experiment -> e1 стала унаследованной от master -> m11. Как это сделать? Как понимаю, если сделать rebase, то она станет новым коммитом мастера, а нужно, чтобы она оставалась отдельной веткой.
  • Вопрос задан
  • 4483 просмотра
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 4
artzub
@artzub
Программист
Rebase как раз и сделает так что головой ветки experiment как раз и станет последний коммит m11 в master.

$ git init
$ echo 111 > 1.txt
$ git add .
$ git commit -m "m10"
$ git checkout -b server
$ echo ser >> 1.txt
$ git commit -am "s11"
$ echo ser1 >> 1.txt
$ git commit -am "s12"
$ echo ser2 >> 1.txt
$ git commit -am "s13"
$ echo ser3 >> 1.txt
$ git commit -am "s14"
$ echo ser4 >> 1.txt
$ git commit -am "s15"
$ git checkout -b experiment
$ echo exp1 >> 1.txt
$ git commit -am "e1"
$ git checkout server
$ echo ser5 >> 1.txt
$ git commit -am "s16"
$ git checkout master
$ git merge server
$ git checkout experiment
$ git rebase master
# будут конфликты, решаем их
$ git mergetool
$ git rebase --continue
$ gitk --all


QytqLXY.png
Ответ написан
Комментировать
@DancingOnWater
Помним, что ВСЕ ветки в git равноправны и термин унаследована от той или от той не верен.
Еще стоит помнить, что гит оперирует состояниями проектов. И с одной стороны коммит - хранит дельту состояния, а с другой все состояние целиком.

Теперь же давайте задаим вопрос иначе?

1)Ветка experiment - это что? Побочная ветка, в которой работа идет над отдельной фичей?
Тогда смысла обновлять ветку experiment нету. А лучше использовать по окончании экспериментов слить ветку с мастером с помощью merge.

2)Эта ветка является ответвлением, где началась над новой версией продукта, а в мастере содержаться фиксы, которые должны быть перенесены в новую версию? Тогда логичным выглядит использование патчей.

3) В ветки experiment ведется паралелльная, альтернативная разработка? Тогда лучше использовать rebase, тогда все ваши коммиты окажутся сверху и ход вашей разработки не будет нарушен
Ответ написан
Комментировать
tamtakoe
@tamtakoe Автор вопроса
Что это даст в контексте задачи?
Ответ написан
tamtakoe
@tamtakoe Автор вопроса
rebase оказался тем чем надо. Хотя, плохо представляю как сделать это с помощью патчей. Может быть с ними тоже просто.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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