стратегия git для ограничения набора коммитов определенной веткой - PullRequest
5 голосов
/ 30 марта 2010

Мне нужно часто сливаться между dev и master.

У меня также есть коммит, который мне нужно применить только к dev, чтобы все работало локально.

Раньше я только сливался из dev в master, поэтому у меня была ветка production_changes, которая содержала "undo commit" специального коммита dev. и от мастера я слил это. Раньше нормально работал.

Теперь каждый раз, когда я сливаюсь с dev в master и наоборот, мне приходится выбирать и применять один и тот же коммит снова и снова :(. Что уродливо?

Какую стратегию я могу адаптировать, чтобы можно было плавно объединять две ветви, но при этом сохранить некоторые изменения только в одной из этих ветвей?

Ответы [ 3 ]

1 голос
/ 31 марта 2010

Lie to git: сделайте diff в отдельной ветке с корнем в точке вашей ветки 'dev'. Затем «объедините» его с мастером, фактически не меняя мастера: что-то вроде git merge -s ours devfix-branch (вы делаете это на master)

Затем вернитесь к dev и объедините в обычном порядке: git merge devfix-branch. Теперь и dev, и master будут думать, что у них уже есть devfix, и вы можете продолжить слияние с master.

Это оставлено в качестве упражнения для читателя, чтобы увидеть, действительно ли это работает, или можно заставить работать.

1 голос
/ 30 марта 2010

Я бы порекомендовал драйвер слияния (сценарии, объявленные в директиве слияния в файле .gitattributes), чтобы предотвратить воздействие определенных файлов на данный коммит.
(например, если определенные файлы не должны быть изменены, этот драйвер будет таким же простым, как слияние "keep mine" . Это было использовано для объединения только определенных каталогов , например, или чтобы отслеживать, как файлы конфигурации управляются для каждой ветви.)

ОП добавляет:

Но я ищу более умное решение, если оно существует, например, "создайте ветку, которая имеет только отмену коммитов и примените ее к мастеру, подделайте ее на dev"

Умное решение? ...
Ну, я могу предложить git rerere (повторно использовать записанное разрешение конфликтующего слияния: если слияние с dev вызывает конфликт, и если разрешение этого конфликта означает, что вы фактически отменяете это слияние, Вы можете записать это разрешение, чтобы оно автоматически повторялось при следующем слиянии.

См. Rerere Your Boat ... от Скотт Чакон для получения дополнительной информации в этой команде.

0 голосов
/ 30 марта 2010

Я бы сделал это с локальной веткой (то есть нигде не помещаемой) в репозитории dev, которую я бы перебазировал в верхнюю часть ветви dev при извлечении из master. Это не совсем гладко, но я думаю, что это немного лучше, чем сбор вишни.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...