Поддержание чистоты веток Git, но не вызывать конфликтов

Neurax спросил: 13 октября 2017 в 06:09 в: git

Я работал над сокращением рабочего процесса моей команды и его краткостью. Наша команда использует ветки master, staging и development для наших серверов сборки.

Когда над новой задачей / функцией работает над , мы начнем с создания ветки объектов из master, зафиксируем ее вперед столько раз, сколько потребуется, затем используем временную ветвь, чтобы сжать все до 1 коммита и переместить в стадию или разработку.

Рассмотрим эту базовую диаграмму:

Master
   |
Staging
   | 
Development ——> [F1] ——> [F2]
   |
*Temporary* ——> [F2] 
   |
Feature1 ——> [A ——> B ——> C] = [F1]
   |
Feature2 ——> [A ——> B ——> C] = [F2]

Здесь мы видим начальную позицию всех ветвей. Коммиты для каждой функции изолированы и хранятся вместе. Когда объект перемещается в восходящем направлении, его коммиты сдавливаются, а затем объединяются в восходящую ветвь. Например, перевод объекта в разработку означал бы:

    git checkout development;            # Switch to Development
    git pull --rebase $DEV_REMOTE;       # Rebase changes onto development
    git checkout $MASTER;                # Switch to master branch
    git checkout -b $SQUASH;             # So that we can clone a squash branch from it
    git merge --squash $FEATURE_BRANCH;  # Merge in the feature
    git commit -m "Testing ($FEATURE_BRANCH)"; # Meaningfully Commit
    git rebase $DEV_LOCAL;               # Rebase Local Dev onto Feature
    git checkout $DEV_LOCAL;             # Switch back to Dev
    git merge $SQUASH;                   # Merge on the feature
    git branch -D $SQUASH;               # Delete Squash Branch

Это работало довольно долго, пока я не наткнулся на свой первый конфликт во время сквоша. Я не уверен, где было сделано изменение и почему git не может автоматически использовать историю для его разрешения. Это очень простой обмен ввода / вывода.

Мой вопрос: есть ли лучший способ сделать это? Мы хотим объединить наш код как в dev / staging, так и в 1 коммит на ветвь функций, не разрушая и не нарушая ветвь функций при тестировании в процессе разработки (перебазирование неутвержденного кода из dev в ветвь функций будет включать эти изменения при слиянии в промежуточную ветвь).

0 ответов