Недавно впервые создал дополнительную ветку. Сделал в ней 8 коммитов и объединил с мастером (master). Сначала, как обычно, нажал куда-то не туда. Произошло что-то непонятное и новые коммиты пропали. После переоткрытия проекта всё вернулось как было. Со второго раза объединение прошло успешно и история стала выглядеть вот так:
Ну как? Чтобы видеть весь процесс разработки от и до. Было бы прикольно. А при слиянии чтобы новый коммит создавался типа branch merging to Master, а та ветка пусть бы так и оставалась Так было бы намного проще что-то найти в истории (особенно когда проект большой).
Тогда получается, что и над названиями веток можно особо не париться, если оно не сохраняется.
Да, но когда захочется вернуться на момент создания какой-то фичи, с сохранёнными ветками это было бы удобнее сделать. Потому что было бы наглядно видно, где какая фича была начата и где она была закончена (и там же слита в master).
При этом, заодно, в мастере хранились бы только рабочие коммиты, а не весь промежуточный мусор процесса разработки.
Тем не менее есть и другой способ: вы можете взять те изменения, что были представлены в C4 , и применить их поверх C3 . В Git это называется перебазированием . С помощью команды rebase вы можете взять все коммиты из одной ветки и в том же порядке применить их к другой ветке.
В данном примере переключимся на ветку experiment и перебазируем её относительно ветки master следующим образом:
$ git checkout experiment
$ git rebase master
First, rewinding head to replay your work on top of it...
Applying: added staged command
Это работает следующим образом: берётся общий родительский снимок двух веток (текущей, и той, поверх которой вы выполняете перебазирование), определяется дельта каждого коммита текущей ветки и сохраняется во временный файл, текущая ветка устанавливается на последний коммит ветки, поверх которой вы выполняете перебазирование, а затем по очереди применяются дельты из временных файлов.
То есть, если при merge возникли конфликты, нам дают выбрать, какой код оставить? А при rebase все коммиты сваливаются “как есть” в одну ветку? Так ведь трешовое месиво получится