Предполагается, что deploy
никогда напрямую не передается и только получает слияния от master
...
Сразу после того, как вы объединили новую функцию (E - F - G - H) и доВы развернули его, ваше хранилище выглядит примерно так.
B - C E - F - G - H
/ \ / \
A ----- D ------------- I [master]
[deploy]
Вы можете использовать git log --graph --decorate
, чтобы увидеть эту структуру в своем собственном хранилище, но перевернуть по вертикали.
Обратите внимание, как deploy
в D находится непосредственно за master
в I. Когда вы объединяете master в deploy, нет необходимости в слиянии, поэтому Git выполняет «ускоренную перемотку вперед» и просто перемещает метку deploy
в тот же коммит, что и master
.
git checkout deploy
git merge master
B - C E - F - G - H
/ \ / \
A ----- D ------------- I [master] [deploy]
master
и deploy
теперь указывают на один и тот же коммит.
При попытке перебазировать master
поверх deploy
перебазировка работает, но естьничего не делать.
В качестве примечания, в этом рабочем процессе нет необходимости для deploy
ветви, поскольку deploy
всегда является прямым предком master
. Поскольку вы просто перемещаете метку вокруг существующих слияний, было бы проще использовать тег для пометки коммита для развертывания.
# Move the deploy tag to master.
git tag -f deploy master
Это также значительно упрощает отмену развертываний. Допустим, последняя функция отключена. Пока вы его исправляете, вы можете переместить тег обратно к предыдущему известному удачному коммиту.
# Roll back deployment to commit ABC123
git tag -f deploy ABC123
Вы можете использовать пронумерованные или помеченные метками времени или версионные теги, чтобы отслеживать релизы и выпускать самые высокие.
git tag v1.2.3 master
# Get the newest version
git tag --sort=-v:refname | head -1