Задать вопрос
Aligatro
@Aligatro
Turn food and coffee into software...

Как закомитить изменения в 2 разные ветки?

Здравствуйте, в целом сабж.

Существует 2 ветки: master и client, где в первой хранится титульная рабочая версия проекта, а в ветке client расположен тот же проект но уже с пользовательскими изменениями (другая цветовая палитра, переименованные блоки, видоизменённые страницы и т.д). В целом client это master плюс все надстройки добавленные пользователем к проекту.

На каком-то из этапов наступает необходимость изменить поведение работы проекта целиком (в обеих ветках master и client), при этом не мержа изменения client'a в ветку master.

По итогу вопрос следующий, что мне необходимо делать чтобы например изменить файл rest-api.php в обеих ветках, при этом оставляя все остальные файлы в этих ветках нетронутыми (что-бы index.php и другие файлы для ветки master оставался таким же каким и был ранее, а для ветки client index.php и другие файлы были бы с надстройками клиента, при этом rest-api.php изменился бы в обеих ветках)

Это стоит очистить HEAD для обеих веток, добавить все новые изменения в stash и после последовательно переключаясь в каждую из веток и закомитить изменения?

Если не затруднит напишите последовательность команд.

P.s или стоит создать новую ветку из мастера внести изменения в необходимый файл и смержить новую ветку с client и master?

Спасибо.
  • Вопрос задан
  • 1017 просмотров
Подписаться 2 Простой 2 комментария
Решения вопроса 1
@AlexChebanenko
закоммитить изменения в файле rest-api.php, скопировать хеш коммита, переключиться в целевую ветку (client) и выполнить

git cherry-pick %ХЕШ_КОММИТА%
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
dlnsk
@dlnsk
ПК Партнер 01.01 -> ПК Поиск -> IBM PC
Черипики - это, конечно, удобно, но может привести к неприятным последствиям. Это во-первых дублирование коммитов, а во-вторых, если забыть что-то черипикнуть, то ваш клиент перестанет работать и вы будете долго разбираться что к чему.

Решения два:
1. Если ваша ветка client - просто усовершенствование ветки master, то можно сделать rebase и переместить client на верх master'а. Это меняет историю, поэтому подходит не всем, но если вы работаете с репозиторием в одиночку, то вполне нормальное решение (история будет красивой).
2. Так вам и не нужно мержить client в master, а как-раз наоборот смержите master в client и будет именно то, что вам необходимо.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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