Исходя из Mercurial, я использую ветки для организации функций. Естественно, я хочу видеть этот рабочий процесс и в моей истории.
Я начал свой новый проект с использованием git и закончил свою первую функцию. При объединении этой функции я понял, что git использует ускоренную перемотку вперед, то есть он применяет мои изменения непосредственно к основной ветви, если это возможно, и забывает о моей ветви.
Так что думать о будущем: я единственный, кто работает над этим проектом. Если я использую подход по умолчанию в git (ускоренное слияние), моя история приведет к созданию одной гигантской основной ветви. Никто не знает, что я использовал отдельную ветку для каждой функции, потому что в итоге у меня будет только эта гигантская основная ветка. Разве это не выглядит непрофессионально?
По этой причине я не хочу быстрого слияния и не могу понять, почему это по умолчанию. А что тут хорошего?
источник
no-ff
' с его " фиксацией контрольной точки", которая нарушает пополам или обвинение.-no-ff
редко является хорошей идеей, но все же может помочь сохранить внутреннюю историю объекта при записи только одного коммита в основной ветке. Это имеет смысл для длинной истории объектов, когда вы время от времени сливаете ее прогрессию в основную ветку.Ответы:
Быстрое слияние имеет смысл для кратковременных ветвей, но в более сложной истории слияние без быстрой перемотки может облегчить понимание истории и упростить возврат группы коммитов.
Предупреждение : не ускоренная пересылка также имеет потенциальные побочные эффекты. Пожалуйста, просмотрите https://sandofsky.com/blog/git-workflow.html , избегайте «no-ff» с его «фиксацией контрольной точки», которые нарушают пополам или обвиняют, и тщательно продумайте, должен ли это быть подход по умолчанию
master
.(От nvie.com , Винсент Дриссен , пост " Успешная модель ветвления Git ")
Якуб Narębski также упоминает о конфигурации
merge.ff
:Быстрая перемотка вперед по умолчанию, потому что:
Но если вы ожидаете итеративный рабочий процесс в одной теме / ветви функций (т. Е. Я объединяю, затем я возвращаюсь к этой ветви функций и добавляю еще несколько коммитов), тогда полезно включать только объединение в основную ветку, а не все промежуточные коммиты ветви функций.
В этом случае вы можете в конечном итоге установить этот тип файла конфигурации :
ОП добавляет в комментариях:
Джефроми отвечает:
В целом, я добавляю:
На самом деле, когда вы рассматриваете модель веток Mercurial, в ее основе лежит одна ветвь на репозиторий (даже если вы можете создавать анонимные заголовки, закладки и даже именованные ветки ).
См. «Git and Mercurial - Сравнение и контраст» .
источник
feature
ветку в публичное репо, вы можете перебазировать ееmaster
столько раз, сколько захотите. См. Stackoverflow.com/questions/5250817/…feature
ветви обратноmaster
, делает указанную историю линейной или нет. Простое быстрое слияние сделает его линейным. Это имеет смысл, если вы очистили историю этойfeature
ветви перед слиянием в ускоренном режиме, оставив только значительные коммиты, как упомянуто в stackoverflow.com/questions/7425541/… .Позвольте мне немного подробнее остановиться на очень всеобъемлющем ответе VonC :
Во-первых, если я правильно помню, тот факт, что Git по умолчанию не создает коммитов слияния в случае ускоренной перемотки вперед , возник из-за рассмотрения «одинаковых репозиториев» с одной ветвью, где взаимное извлечение используется для синхронизации этих двух репозиториев ( Рабочий процесс вы можете найти в качестве первого примера в документации большинства пользователей, включая «Руководство пользователя Git» и «Контроль версий на примере»). В этом случае вы не используете pull для объединения полностью реализованной ветви, вы используете ее, чтобы не отставать от другой работы. Вы не хотите иметь эфемерный и неважный факт, когда вы делаете синхронизацию, сохраненную и сохраненную в репозитории, сохраненную для будущего.
Обратите внимание, что полезность ветвей функций и наличия нескольких веток в одном репозитории появилась только позже, с более широким использованием VCS с хорошей поддержкой слияния и с попыткой различных рабочих процессов на основе слияния. Вот почему, например, Mercurial изначально поддерживал только одну ветвь для каждого хранилища (плюс анонимные советы для отслеживания удаленных веток), как это было видно в более старых версиях «Mercurial: Полное руководство».
Во-вторых, следуя рекомендациям по использованию ветвей функций , а именно, что все ветви функций должны начинаться со стабильной версии (обычно с последнего выпуска), чтобы можно было выбирать и какие функции включать, выбирая, какие ветви функций следует объединить, вы обычно не находятся в ситуации ускоренной перемотки ... что делает этот вопрос спорным. Вам нужно беспокоиться о создании истинного слияния, а не о перемотке вперед при слиянии самой первой ветви (при условии, что вы не вносите изменения с одним коммитом непосредственно в 'master'); все другие последующие слияния, конечно, находятся в ситуации, не связанной с перемоткой вперед.
НТН
источник