Я работаю в чистом репо с одним файлом. Я единственный разработчик.

Я хочу выполнить рабочий процесс development-release-master в успешной модели ветвления git так и сделал:

Примечание. Имейте в виду, что по умолчанию ускоренная перемотка вперед отключена, поэтому все команды merge следует рассматривать как merge --no-ff.

Мое происхождение - Github.

В ветке master :

git add .
git commit -m "Initial commit"
git push origin master
git checkout -b develop

В ветке develop . Я вношу изменения в файл, а затем:

git add .
git commit -m "work in the file"

Я готов выпустить это как версию 0.0

git checkout -b release-0.0 develop

В ветке release-0.0 . Я добавляю в файл номер версии.

git add .    
git commit -m "Bumped version 0.0"

Готов слить этот релиз в мастер.

git checkout master
git merge release-0.0 -m "Releasing v0.0"
git tag -a 0.0 -m "Version 0.0"

... и в разработку.

git checkout develop
git merge release-0.0 -m "Merge release 0.0 into develop"

Затем я отправляю master и develop в Github.

git push origin master
git push origin develop

Когда я проверяю ветку develop в Github, она говорит:

Эта ветка на 1 коммит впереди, на 1 после мастера.

В ветке master такого сообщения нет.

Что я могу сделать, чтобы это исправить? На этом этапе master и develop должны быть равны, так как они были объединены с помощью release-0.0 .

12
Victor 27 Фев 2016 в 19:29

3 ответа

Лучший ответ

Нет, не будет равных, поскольку по умолчанию у вас отключена перемотка вперед. Каждое слияние создает новую фиксацию, а фиксация слияния имеет другой идентификатор. Таким образом, фиксация слияния в master - это не фиксация слияния в разработке. И, следовательно, у разработки есть фиксация не в мастере, а в мастере есть фиксация не в разработке. Следовательно, сообщение в разработке.

Что касается сообщения, отсутствующего в мастере, это потому, что сообщение приходит, когда ветка сравнивается с мастером. Поэтому, если вы сравниваете мастер с мастером, сообщение не требуется.

Одно из решений - включить ускоренную перемотку вперед и явно создавать коммиты слияния в выпуске и мастере, а затем продолжать ускоренную разработку. Другой вариант - переустанавливать разработку после каждого слияния в master. Как вы хотите это сделать, - это исключительно ваш личный выбор в зависимости от вашего рабочего процесса и кода.

Кроме того, сообщение о том, что нет того, о чем вы должны беспокоиться, пока код в ветвях будет именно таким, как вы хотите.

6
TheGeorgeous 27 Фев 2016 в 16:52

Поскольку вы используете --no-ff, каждое слияние будет отдельным коммитом. Когда вы объединяете release-0.0 в development и master, коммиты слияния будут разными. Вот как это выглядит:

commits

Как вы можете видеть, в ветке разработки есть одна фиксация (слияние версии 0.0 с разработкой), которая не входит (недоступна) в главном сервере, а в главной ветке есть одна фиксация (выпуск версии 0.0), которой нет в ветке разработки. И это то, что GitHub говорит с этим сообщением, и все в порядке (содержимое такое же, но коммиты разные).

Если вы хотите использовать git flow, вам следует взглянуть на https://github.com/nvie/gitflow, что вам очень поможет.

2
jkmartindale 1 Июл 2019 в 19:48

Просто чтобы добавить к другим ответам:

Исходный git-flow не разрабатывается с 2012 года, и его заменил git-flow AVH edition во многих местах (включая репозитории Ubuntu и Git для Windows).

Одно из отличий, внесенных в выпуск AVH, заключается в том, что окончательное слияние master * с development , а не выпуска с развивать .

Это делает master прямым родительским элементом develop и устраняет одну часть сообщения, которое вы видите; должен остаться только «1 коммит вперед». Это также немного упрощает проверку того, что master и development не расходятся случайно.

* Точнее, это новый тег (на мастере), который объединяется в develop.

7
Konipas 27 Фев 2016 в 23:18