Как я могу найти то, что предотвращает ускоренное слияние?

Мы делаем Git Flow здесь, но теперь нам нужно создать ветку исправлений до того, как Git Flow запустился. У нас есть v906b03 тег до создания release а также develop ветви. У нас также есть v914 а также v915 теги после начала Git Flow.

Подход был бы таким в следующих строках:

$ git checkout master
$ git reset --hard v906b03 #make sure that master "passed by" v906b03
$ git branch v906b03-hotfix
$ git merge v914 #this merge should be a fast-forward
$ git merge v915 #this merge should be a fast-forward

Теперь я получаю рекурсивные слияния для слияния с v914, Я пытался найти то, что v906b03 коммиты не достижимы от v914 без удачи Я старался git log --oneline --not v914 v906b03, но это было пусто. Я тоже пробовал git log --oneline v914..v906b03, это должно быть то же самое, также пустым.

Что здесь происходит?

3 ответа

Решение

поведение по умолчанию для объединения тегов - использовать --no-ff как вариант слияния

Это больше не будет так с Git 2.17 (Q2 2018)

Смотрите коммит adcc94a (14 февраля 2018 г.) от Junio ​​C Hamano ( gitster )
(Объединено Юнио С Хамано - gitster - в комитете f88590e, 06 марта 2018 г.)

merge: разрешить ускоренную перемотку вперед при объединении отслеживаемого тега

Давным-давно в fab47d0 ("объединение: принудительное редактирование и режим no-ff при объединении объекта тега", 2011-11-07, Git v1.7.9-rc0), " git merge "было сделано, чтобы всегда создавать коммит слияния при слиянии тега, даже когда объединяемая боковая ветвь является потомком текущей ветки.

Это значение по умолчанию подходит для слияний, сделанных сопровождающими, чтобы интегрировать работу, подписанную нижестоящими участниками, но оставит бессмысленным no-ff сливается, когда нижестоящие авторы тянут новый тег выпуска, чтобы их давно работающие ветки темы догоняли верхний поток.
Если по теме не осталось локальной работы, такое объединение должно просто перенести коммит, на который указывает тег release.

Обновите значение по умолчанию (снова) для " git merge "который объединяет объект тега с

  • (1) --no-ff (т.е. создать коммит слияния, даже когда боковая ветвь переходит вперед), если сливаемый тег не находится в ожидаемом месте в refs/tags/ иерархия и
  • (2) --ff (т.е. разрешить ускоренное обновление, когда это возможно) в противном случае.

Я нашел ссылку на http://git.661346.n2.nabble.com/git-merge-lt-tag-gt-behavior-td7580058.html о том, что по умолчанию для объединения тегов используется поведение --no-ff как вариант слияния. Я даже пытался использовать --ff без успеха, но с использованием хеша коммитов или даже git show-ref <tag> сделал бы трюк.

Если объединение с v906b03 до v914 и v915 - это просто ускоренная перемотка вперед, вы можете сразу же создать исправление v906b03 на v915 и вообще не выполнять слияние.

Кроме того, почему вы перемещаете своего мастера на v906b03? (сбросить --hard)

Другие вопросы по тегам