Ответ 1
Я описываю рецепт и показываю скриншоты состояния репозитория, как показано в SourceTree (так как он показывает все ветки сразу). Обратите внимание, что ветки - это "au", "ga" и "master" вместо GPT-99_description_AU, GPT-99_description_GA и GPT-99_description, используемые в рецепте.
(Вы можете спросить, почему есть дополнительная строка и период перед каждым блоком кода - единственный способ, которым я мог бы его форматировать сегодня!)
- Создайте 3 ветки. Они должны отражать проблему, над которой нужно работать, и иметь один для AuScope, а другой для GA. Нам также нужен один, чтобы объединиться в
.
$ git checkout master # or whatever base branch we will be using
$ git branch GPT-99_description
$ git branch GPT-99_description_AU
$ git branch GPT-99_description_GA
- Выполнять всю работу над ветвью GA
.
$ git checkout GPT-99_description_GA
- Выполнять изменения, добавлять файлы и удалять файлы по мере необходимости
- ИДЕНТИФИЦИРУЙТЕ ФАЙЛЫ, КОТОРЫЕ ДОЛЖНЫ ПОЙТИ В AUS, так как они должны быть совершены отдельно (иначе как мы отправим JUST THOSE в AUS?)
- Зафиксируйте файлы AUS. Запустите сообщение фиксации с чем-то, что идентифицирует как файл AUS совершает
.
$ git add <files>
$ git commit -m "GPT-99 - AUS files - ..."
Возможно, вместо использования использования тегов. Что-то посмотреть позже.
- Зафиксируйте файлы GA. Нет необходимости в идентификационном сообщении.
.
$ git add <files>
$ git commit -m "GPT-99 - ..."
- Переключиться на ветвь AuScope
.
Switch to the AuScope branch
- Вишневый захват AuScope совершает (смотрите журнал)
.
$ git cherry-pick SHA#1
$ git cherry-pick SHA#2
...
- Теперь, что произошло здесь, это то, что коммиты были скопированы и будут существовать на GA-ветвях AUS. Коммиты являются отдельными (у них разные SHA), но их содержание одно и то же - если оба будут воспроизведены, будет конфликт, так как оба будут пытаться добавить/удалить/отредактировать одно и то же. Мы можем использовать трюк git, как описано в https://git-scm.com/book/en/v2/Git-Branching-Rebasing#Rebase-When-You-Rebase, где скопированные коммиты будут иметь идентификатор патча, который идентифицирует коммит как быть тем же. Это позволяет нам переустанавливать и git разрешает разные коммиты быть только одним
.
$ git rebase --onto GPT-99_description GPT-99_description_AU GPT-99_description_GA
- Дубликаты фиксируются. Однако ветвь GA не имеет изменений AUS. Чтобы это произошло, мы сливаемся:
.
$ git checkout GPT-99_description_GA
$ git merge GPT-99_description_AU
- Репозиторий теперь находится в состоянии, где ВСЕ изменения находятся на ветке GA, а изменения, которые должны быть отправлены в качестве запроса на перенос в AuScope, находятся в ветки AU.