Швидке з’єднання вперед має сенс для короткочасних гілок, але в більш складній історії нешвидке з’єднання вперед може полегшити розуміння історії та полегшити відновлення групи комітетів.
Попередження : Нешвидкісний пересилання також має потенційні побічні ефекти. Перегляньте https://sandofsky.com/blog/git-workflow.html , уникайте "no-ff" з його "контрольно-пропускними пунктами", які порушують бісект або звинувачення, і уважно подумайте, чи має це бути вашим підходом за замовчуванням master
.
(Від nvie.com , Вінсент Дріссен , пост " Успішна модель розгалуження Гіта ")
Включення готової функції в розробку
Готові функції можуть бути об'єднані в гілку розробки, щоб додати їх до майбутнього випуску:
$ git checkout develop
Switched to branch 'develop'
$ git merge --no-ff myfeature
Updating ea1b82a..05e9557
(Summary of changes)
$ git branch -d myfeature
Deleted branch myfeature (was 05e9557).
$ git push origin develop
--no-ff
Прапор викликає злиття завжди створювати новий об'єкт коммітов, навіть якщо злиття може бути виконана з швидкого перемотування вперед. Це дозволяє уникнути втрати інформації про історичне існування відгалуження та об'єднує всі комісії, які разом додали функцію.
Якуб Narębski також згадує про конфігураціїmerge.ff
:
За замовчуванням Git не створює додаткових комірок злиття під час об'єднання комісії, яка є нащадком поточної комісії. Натомість кінчик поточної гілки швидко пересувається.
Якщо встановлено значення false
, ця змінна повідомляє Git створити додатковий комітет злиття в такому випадку (еквівалентному наданню --no-ff
параметра з командного рядка).
Якщо встановлено значення " only
", дозволяються лише такі швидкі злиття вперед (що еквівалентно наданню --ff-only
опції з командного рядка).
Перемотка вперед - це за замовчуванням, оскільки:
- короткотривалі гілки дуже легко створити та використовувати в Git
- недовговічні гілки часто виділяють багато комітетів, які можна вільно реорганізувати у межах цієї гілки
- ці комісії фактично є частиною основної галузі: після реорганізації головна гілка швидко переходить до їх включення.
Але якщо ви передбачаєте повторний робочий процес з однієї галузі / теми (тобто я зливаюсь, потім я повертаюсь до цієї гілки функцій і додаю ще кілька комісій), тоді корисно буде включати лише об'єднання в основну гілку, а не всі проміжні комітети гілки функцій.
У цьому випадку ви можете закінчити налаштування такого типу конфігураційного файлу :
[branch "master"]
# This is the list of cmdline options that should be added to git-merge
# when I merge commits into the master branch.
# The option --no-commit instructs git not to commit the merge
# by default. This allows me to do some final adjustment to the commit log
# message before it gets commited. I often use this to add extra info to
# the merge message or rewrite my local branch names in the commit message
# to branch names that are more understandable to the casual reader of the git log.
# Option --no-ff instructs git to always record a merge commit, even if
# the branch being merged into can be fast-forwarded. This is often the
# case when you create a short-lived topic branch which tracks master, do
# some changes on the topic branch and then merge the changes into the
# master which remained unchanged while you were doing your work on the
# topic branch. In this case the master branch can be fast-forwarded (that
# is the tip of the master branch can be updated to point to the tip of
# the topic branch) and this is what git does by default. With --no-ff
# option set, git creates a real merge commit which records the fact that
# another branch was merged. I find this easier to understand and read in
# the log.
mergeoptions = --no-commit --no-ff
ОП додає в коментарях:
Я бачу деякий сенс у швидкому переході до [короткотривалих] гілок, але зробити це дією за замовчуванням означає, що git передбачає вас ... часто є [недовговічні] гілки. Розумні?
Джефромі відповідає:
Я думаю, термін експлуатації філій сильно відрізняється від користувача до користувача. Серед досвідчених користувачів, мабуть, існує тенденція до того, що є набагато більше короткочасних відділень.
Для мене короткотривала гілка - це те, що я створюю для того, щоб полегшити певну операцію (звільнення, швидше за все, або швидке виправлення та тестування), а потім негайно видалити, як тільки я закінчу.
Це означає, що вона, ймовірно, повинна бути поглинена темою, з якої вона розщелена , і тематична гілка буде об'єднана як одна гілка. Нікому не потрібно знати, що я робив всередині, щоб створити ряд комісій, що реалізують цю функцію.
Більш загально додати:
це дійсно залежить від вашого робочого процесу розвитку :
- якщо вона лінійна, одна гілка має сенс.
- Якщо вам потрібно ізолювати функції та працювати над ними протягом тривалого періоду та багаторазово їх об’єднувати, кілька гілок мають сенс.
Див. " Коли ви маєте відділитись? "
Насправді, якщо розглядати модель гілки Mercurial, вона є її сутністю однією гілкою на сховище (навіть якщо ви можете створювати анонімні заголовки, закладки та навіть названі гілки ).
Див. "Git and Mercurial - Порівняйте та контрастуйте" .
Mercurial за замовчуванням використовує анонімні полегшені коделі, які в своїй термінології називаються "голови".
Git використовує легкі гілки з назвою, з інжективним відображенням для відображення назв гілок у віддаленому сховищі до назв гілок віддаленого відстеження.
Git "змушує" вас називати гілки (ну, за винятком однієї безіменної гілки; ситуація називається " відокремленою ГОЛОВОЮ "), але я думаю, що це краще працює з важкими галузями робочих процесів, таких як тематичний робочий потік, тобто кілька гілок в одній парадигмі сховища.
no-ff
" з його "контрольно-пропускними пунктами", які порушують бісект або вину.