Ведение ветки в актуальном состоянии с помощью мастера
У меня есть удаленный репозиторий, из которого я вытащил и из него вышло. Я хочу обновить новую ветвь с изменениями, сделанными для мастера. Я думаю о рабочем процессе ниже, это имеет смысл или есть ли лучшие способы сделать это?
-
Начальное разветвление и проверка:
git checkout master
git pull
git checkout -b my_branch
-
Сделайте несколько работ в my_branch
, а затем периодически:
git checkout master
git pull
git checkout my_branch
git merge master --no-ff
Повторите шаг 2, если необходимо, с периодическим нажатием на удаленный my_branch
.
Затем, когда вы готовы к слиянию обратно:
git checkout master
git merge my_branch --no-ff
Звук нормально?
Ответы
Ответ 1
Вы можете упростить свои команды:
1.
git fetch
git checkout -b my_branch origin/master
2.
git fetch
git merge origin/master
git fetch
обновляет удаленные ветки, обычно нет необходимости иметь локальную копию ветки, если вы не планируете работать с этой веткой.
Вы можете опустить --no-ff
после настройки git config --global merge.ff false
.
git help config
говорит:
merge.ff
By default, Git does not create an extra merge commit when merging
a commit that is a descendant of the current commit. Instead, the
tip of the current branch is fast-forwarded. When set to false,
this variable tells Git to create an extra merge commit in such a
case (equivalent to giving the --no-ff option from the command
line). When set to only, only such fast-forward merges are allowed
(equivalent to giving the --ff-only option from the command line).
Помните, что git pull
представляет собой комбинацию git fetch
и git merge
.
Обычно вы просто хотите git pull --rebase
, который по существу git fetch
plus git rebase
, и создает намного более чистую историю.
Есть ли причина для ваших "периодических толчков"? Если никто другой не работает над одной и той же веткой, это было бы прекрасно, просто нажать после завершения всего.
Ответ 2
Я бы посоветовал использовать рабочий процесс rebase. Поэтому вместо git pull
вы должны использовать git pull --rebase
.
Я бы сделал то же самое с ветвью функций. Поэтому вместо git merge master --no-ff
я использовал бы git rebase master
. Однако, если ветвь функции предназначена для совместного использования сотрудниками во время разработки, тогда вам будет лучше слить ведущую ветвь периодически в ветвь функции.
Но, честно говоря, я работаю в небольшой команде, и если нам нужно работать вместе с филиалом функции, и нам нужно обновить его с помощью мастера, мы просто приостановим нашу работу на короткое время (и сообщим процесс четко), rebase на master и force нажимают на ветвь функции. Но, конечно, это не масштаб для больших команд. Тем не менее, мне гораздо удобнее работать с ветвью функций, которая сворачивается на master вместо того, чтобы иметь дело с слияниями с мастером.
Обязательно прочтите это.
Git проблемы с рабочим процессом и rebase vs merge