У меня есть ветка выпуска, которая ответвлена от мастера. И в ветке релиза будет несколько локальных коммитов. Мне нужно синхронизировать ветку выпуска с мастером. Поэтому каждое утро я запускаю сценарий со следующими шагами:
git checkout releasebranch
git rebase -Xtheirs master
(Xtheirs, чтобы локальные изменения в ветке выпуска отменяли в случае конфликтов)git pull origin releasebranch --rebase
(чтобы мои локальные коммиты оставались на месте после перебазирования)git push origin releasebranch
Это вызывает дублирование коммитов и большое количество различий из основной ветки. Любая подсказка, следую ли я правильному методу синхронизации ветки?
Примечание:
а. Мне нужно запустить автоматический сценарий для синхронизации, поэтому разрешение конфликтов вручную нецелесообразно. Поэтому использовался вариант Xtheirs
.
б. Пробовал git merge -Xours master
и он выкидывает хрен конфликтов.
c. У меня есть еще одна ветка, которая синхронизируется от мастера с помощью команды git rebase -s ours master
, и она работает нормально. Но в этом случае мне нужны локальные изменения на releasebranch, чтобы переопределить изменения в master.
Мне кажутся подозрительными ваши третий и четвертый шаги. В идеале, если вы используете рабочий процесс перебазирования для releasebranch
, вы должны быть единственным, кто использует эту ветвь. Так что второй шаг имеет смысл, потому что именно так вы будете в курсе master
. Но я не уверен в синхронизации с другими изменениями, исходящими от людей, делящихся этой веткой.
Для вашего четвертого шага, поскольку вы, возможно, переписали историю releasebranch
, следующее в большинстве случаев не работает:
git push origin releasebranch
Вместо этого вам нужно будет нажать сила на ветку выпуска через:
git push --force origin releasebranch
Так что, возможно, советуем по возможности исключить шаг 3, если можете, а затем принудительно нажать на четвертом шаге.