Я хочу существенно поменяться ролями двух веток в git-репо, когда дело доходит до слияния.Поскольку существует много потенциальных способов решения моей проблемы, я просто объясню свои обстоятельства, чтобы избежать XY-вопроса:
Я разрабатываю прошивку для устройства, которое прошло несколько аппаратных ревизий, для которых требуетсятонкие различия (в основном разные константы) в прошивке.(Соответствующими) версиями аппаратного обеспечения являются «proto2», «proto3» и «proto4».Первоначальная основная ветка называется master, и в настоящее время она соответствует аппаратной ревизии proto2.В те времена, когда появился «proto3», я создал новую ветку под названием («образно») «proto3».Затем я внес изменения, связанные с новой версией аппаратного обеспечения в ветку «proto3», и продолжил разработку в «master» для ревизии «proto2».Таким образом, я мог бы затем извлечь «proto3», слить в него «master» и получить мою «proto3» -совместимую прошивку с новыми функциями.С тех пор появился «proto4», в котором есть еще одно изменение (буквально однострочное).Итак, теперь я развиваюсь в «master», а затем должен всегда объединять изменения в «proto3» и «proto4» (это также означает, что я должен выполнить разработку на более старом прототипе).
Теперь мыПереходим к производству, и «proto4» будет производственной прошивкой.Однако, так как некоторые из старых прототипов все еще весьма полезны, я бы хотел поменять роли ветвей, то есть иметь возможность развиваться в ветке «proto4» и сливаться оттуда в «master», не вводя связанное с аппаратным обеспечениемизменения, внесенные ранее в «proto4» обратно в «master».
Другими словами, в остальном обычное слияние, за исключением того, что некоторые (старые) коммиты никогда не объединяются из «proto4» в «master».
Я могу придумать пару способов добиться этого:
- Я всегда могу просто выбрать новые коммиты из «proto4» в «master».Тем не менее, это нужно помнить, чтобы делать это каждый раз, когда я делаю бэкаппорт изменений, и забывание об этом приводит к путанице.
- Я мог бы объединить «proto4» с «master», а затем вернуть все связанное с оборудованиемфиксирует из «proto4» в «master», то есть отменяет изменения.Мне нужно будет покопаться в журнале коммитов, чтобы найти эти изменения, но это должно быть выполнимо.
Вариант 2. кажется весьма необоснованным способом сделать это, так как это одноразовая проблемаи только один раз за ошибку.Тем не менее, я чувствую, что должен быть более простой способ, где мне не нужно вручную выбирать правильные коммиты для возврата?
PS: Я, конечно, также собираюсь переименовать ветви, но этоПохоже, что он покрыт Переключение имен веток в git , а может быть, даже лучше https://mohitgoyal.co/2018/04/07/swap-master-branch-with-another-branch-in-git/