Должен ли я git merge превратиться в master, а затем вернуться после пометки?
Вопрос - как добиться правильной версии (показано с git describe
) на develop
после того как я слил его в master
и помечены master
,
Я использую обычные Git-ветвления - master
для производства. Скажем git describe
шоу 1.5
на master
и, после слияния с develop
, master
шоу 1.5-234-g1e894af
,
Поэтому я создаю новый аннотированный тег с git tag -a 1.6
и поэтому git describe master
сейчас показывает 1.6
,
НО: git describe develop
все еще показывает 1.5-something
что странно как для меня - у него такие же коммиты как и у master
- почему мерзавец думает, что это все еще принадлежит 1.5
версия?
Ничто лучше не приходит в мой мозг, так что я просто сливаю мастера в разработку, и после этого разработка показывает версию 1.6-2-...
что приемлемо, но производит еще 1 бесполезный коммит слияния и предупреждает меня о "слиянии, выполненном рекурсивно", что я тоже считаю бессмысленным, но как тогда получить правильную версию?
2 ответа
Похоже, что-то не так с вашим использованием мерзавца. Если вы сливаетесь develop
в master
, но никогда master
в develop
, затем master
может свободно расходиться - любые изменения master
никогда не попадет в develop
филиал. Поэтому ваше утверждение, что они имеют одинаковые коммиты, является ложным. Используя диаграмму VonC,
m(1.5)--m1--m2--m(1.6, master)
\ /
d-------d----d (develop)
Коммиты, которые я обозначил "m1" и "m2", никогда не попадут в "Develop". Если таких коммитов нет - вы не работаете с мастером - тогда, когда вы делаете слияние из развития в мастера, это должно быть слияние с ускорением; тогда они будут иметь такие же коммиты, и все будет работать так, как вы описали.
Конечно, решение зависит от рабочего процесса, которого вы пытаетесь достичь.
Лично я бы на этом этапе либо удалил и воссоздал
develop
ветвь, начинающаяся с мастера, или перемотка вперед1.6
, так что когда вы продолжите работать надdevelop
у вас есть эта структура:m(1.5)--m1--m2---m(1.6, master) \ / \ d-------d----d d--d (develop)
затем
git describe
будет считать, что он основан на 1.6, как это на самом деле.Если ваше намерение таково
develop
является отраслью непрерывного развития, иmaster
это ветка "release", поэтому вам следует избегать создания коммитов, таких как m1 и m2; насколько вы,git describe
точно говорит вам, что что-то другое.
Я не эксперт по использованию git в командах, так что принимайте все с небольшим количеством соли.
Принимая во внимание git describe
о "поиске самого последнего тега, который доступен из коммита", кажется, что git describe
на develop
вернуться к master
на коммит, где ваш новый 1.6
тег еще не установлен.
m(1.5)--m--m--m(1.6, master)
\ /
d-------d--d (develop) => git describe develop will return 1.5-xxx
После объединения мастер для разработки
m(1.5)--m--m--m(1.6, master)
\ / \
d-------d--d---d (develop) => git describe develop will return 1.6-xxx
Если другие участники не работают над develop
Вы могли бы рассмотреть вопрос о перебазировании develop
ветвь сверху master
, чтобы вернуть ожидаемый тэг. ( git rebase)
m(1.5)--m--m--m(1.6, master)
\
d--d--d (develop) => git describe develop will return 1.6-xxx