Как мне очистить мои git ветки, чтобы в будущем иметь чистую историю? - PullRequest
0 голосов
/ 04 августа 2020

Я работаю над проектом со следующими ветками:

  • alpha
  • beta
  • prod

Все изменения передан на alpha через PR, а затем слился с beta , а затем prod перед выпуском.

Проблема, с которой я столкнулся, заключается в том, что слияние из альфа до бета и бета до prod были выполнены с помощью одного и того же процесса PR, который создает очень запутанную историю.

Итак, когда мы объединяем альфа в бета , например, мы создаем ветку функций на основе бета , объединяем альфа в эту ветку, а затем отправьте PR, чтобы объединить ветку функции в beta .

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

Что было бы наилучшим способом «повторно выровнять» мои ветки, прежде чем я начну с этого нового процесса.

Я думал, что мне нужно будет выполнить полное слияние от prod до beta , а затем beta до alpha , что, я думаю, позволит мне чтобы иметь чистые слияния и историю от alpha до beta , а затем от beta до prod в будущем. Будет ли это так?

PS: Я НЕ хочу заставлять pu sh перезаписывать историю существующих веток. Я надеюсь, что это можно «исправить».

Вот как выглядит наша история, если мы смотрим только на alpha , beta и prod :

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 05 августа 2020

С тремя ветвями Git вы можете выполнить четыре команды rebase, чтобы синхронизировать их все c.

git rebase prod alpha
git rebase alpha beta
git rebase beta prod
git rebase prod alpha

Перед этим squa sh все коммиты в каждой ветке в одну, если вы действительно хотите навести порядок, и история коммитов не важна.

git rebase -i HEAD~<# of commits on the branch>

Вы получите тот же результат, что и на следующей диаграмме ветвления, со всеми файлами из подсказок каждого из все три репозитория вместе в A '

Quadruple rebase to bring all branches into sync

If you really wanted to get courageous, you could further squash the commits and make it look like the branch operations never even happened in the first place.

git rebase -i HEAD~<# of commits to squash>

In a similar Git очистить ситуацию с тремя ветвями Я свел все репо до двух коммитов.

введите описание изображения здесь

0 голосов
/ 04 августа 2020

Вы можете переключиться на выборку и перебазирование, где, например, вместо слияния бета-версии с альфа-версией вы извлекаете последнюю ревизию из бета-версии и перемещаете свои альфа-коммиты поверх. В истории все альфа-коммиты будут следовать после бета-коммитов. Слияние альфа-версии с бета-версией будет быстрым шагом вперед. Затем удалите альфа-канал и разделите новый альфа-канал из бета-версии, чтобы продолжить разработку альфа ...

...