Я работаю над проектом с Git и пришел к тому моменту, когда хотел разбить развитие на две отдельные ветки. Разделение касается простого изменения (с капиталом C, поэтому я могу вернуться к нему позже), который затрагивает одну изолированную часть кодовой базы - в одной ветке я хочу, чтобы Change присутствовал; в другом - нет. Это изменение инкапсулировано в одну транзакцию.Поддержание ветки, которая не содержит коммитов, связанных с определенным изменением
Ветвь master
, где я выполняю все свое кодирование (если не задана конкретная тема) - это ветка, в которую я хочу сменить. Я хотел бы создать отдельную ветку, original
(или что бы вы там ни называли), которая не содержит изменения.
master
, ветка с изменением, останется основной, предпочтительной ветвью: это ветка. Я буду продолжать кодирование, и это ветка, код которой я на самом деле запускаю. Я хочу сохранить original
на всякий случай, если мне нужна версия кода без вышеупомянутого изменения позже.
Возникла проблема: я хотел бы иметь возможность «объединить» работу с master
в original
по дороге, но, очевидно, только коммиты, которые не касаются изменения.
- Если я простой
git merge master
,original
будет Перенесемся вmaster
, представляя изменение, которое я не хочу, не так ли? - Я не хочу развиваться на
original
и сливаться сmaster
, потому чтоoriginal
- это особый случай, а неmaster
. - Я не хочу
cherry-pick
отmaster
, потому что это будет мутить мою историю развития. - Я мог бы создать новую ветку,
develop
, из фиксации, которая вводит изменение вmaster
. Я мог бы совершать коммиты, не связанные с изменением, на этой ветке и легко объединить их вmaster
илиoriginal
. Однако, если я сделаю некоторые связанные с изменением коммиты наmaster
и хочу объединить их вdevelop
, то я снова не смогу безопасно объединитьdevelop
вoriginal
, не так ли?
Я хотел бы узнать ваше мнение о том, как лучше всего действовать.
EDIT: Я единственный человек, работающий над этим проектом, поэтому не исключайте решение, потому что это может испортить других программистов в условиях совместной работы. Я просто ищу простое в использовании решение, которое производит чистый, интуитивно понятный история, которая отражает то, что эти разные истории развития на самом деле. Если такого решения не существует, я приму один из ответов, которые выполняются.
ОК, но что делать, если в будущем я сделаю больше изменений, связанных с изменением? Должен ли я возвращаться каждый раз, когда сливаюсь? – jobo3208
Допустим, что у вас есть hash 'e35g5d' в master. Вы входите в оригинал, и у вас будет то же самое в оригинале. Когда вы запустите 'git revert', будет создан новый объект commit, который будет обратным к тому, что находится в' e35g5d'. Эта фиксация существует только в оригинале и может поддерживаться только в исходной ветви. Теперь, когда вы объединяете master, поскольку фиксация с хешем уже присутствует, git не воссоздает фиксацию в исходной ветви. Надеюсь, это прояснится. –
+1: Да, это объясняет, спасибо. Мне не нравится идея возвращать фиксации каждый раз, когда я сливаюсь, но это решение работает. Я протягиваю немного дольше для более чистого решения. – jobo3208