пытаюсь перенести изменения из одной ветки в другую с rebase и я не понимаю - PullRequest
1 голос
/ 08 октября 2019

У меня есть две ветви:

  • master
  • deploy

, когда что-то выдвигается в deploy , система сборкиавтоматически развертывает изменения. поэтому обычно работа выполняется в различных ветках, объединяемых в master , а затем, когда пора deploy , master объединяется в deploy и все работает.

Поскольку deploy на самом деле не имеет ничего, кроме регулярных слияний с master , я думал о попытке использовать rebase вместо слияния.

Насколько я понимаю, это:

git checkout master
git rebase deploy

и ... ничего не происходит

это вывод:

$ git checkout master
Already on 'master'
Your branch is up to date with 'origin/master'.
$ git rebase deploy
Current branch master is up to date.

, очевидно, функция работает, и я 'я чего-то не понимаю :) что мне не хватает?

может быть, это не правильный путь для достижения моей цели;Короче, я пытаюсь сделать так: головка deploy теперь указывает на головку master .

1 Ответ

2 голосов
/ 08 октября 2019

Предполагается, что 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...