Должен ли я 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
Другие вопросы по тегам