Git слияние и фиксация проблемы

У меня есть 2 ветки - мастер и разработка. Пока я нахожусь в ветке разработки, я зафиксировал и нажал изменение (добавлено в файл), и оно выполнено успешно.

Однако, когда я git checkout master, а затем git merge develop... Вместо того, чтобы получать выходные сообщения вроде (я копирую это сообщение из предыдущего слияния, которое я сделал), и сделал git push:

Updating 325ac4a..51ffb06
Fast-forward
Test_Folder/Images/Img_01.jpg | Bin 0 -> 4224 bytes
2 files changed, 1 insertions(+)
create mode 100644 Test_Folder/Images/Img_01.jpg

Меня попросили добавить сообщение коммита в самом терминале... Это сильно отличается от всех предыдущих слияний, которые я сделал, и это первый раз, когда я его видел. Хотя мне удалось получить Пропустите commit с последующим git push, я делаю это не так - то?

Тем не менее, если вышеуказанная "проблема" кажется правильной, есть ли способ, которым я могу передать сообщение, не переходя через стиль терминала? (Кстати, я пытался использовать git gui но, видимо, я не вижу файлов или вообще ничего)

1 ответ

Похоже, вы получаете истинное слияние в этот раз, а ускоренное слияние происходит ранее.

Взгляните на git docs за разницу между ними.

PS: Совершенно нормально делать истинное слияние. Однако многие совлокальные среды, как правило, запрещают их, поскольку это слияния, которые могут фактически привести к конфликтам. Слишком быстрое слияние никогда не конфликтует. Но опять же, оба очень нормальные.

Изменение: Здесь ситуация, в которой делается конкретный вид слияния:

1) Fast-forward merge: Это выполняется, когда ваш master является прямым предком ветки, которую вы пытаетесь объединить в ней.

--*--*--*(master, HEAD)--*--*--*(dev)

В этом случае выполнение слияния означает просто перемещение master ссылки на dev. Конечный результат будет выглядеть так:

--*--*--*--*--*(master, dev, HEAD)

2) Истинное слияние: Это происходит, когда master не является прямым предком ветки, которую вы пытаетесь объединить.

--*--*--*--*(master, HEAD)
 \
 --*--*--*(dev)

В этом случае master перемещается вперед от точки, в которой была создана ветвь dev. Таким образом, во время слияния мы должны будем включить изменения этого нового commit (ов) на master тоже. Так мерзавец будет пытаться создать совершенно новый коммит, который наследует от обоего ветвей и перемещает master к нему.

-*--*--*--*---------*(master, HEAD)
 \ /
 --*--*--*(dev)

Сравните это с ff merge, и вы поймете, почему они так названы. HEAD обозначает текущую ветвь.

Надеюсь, на этот раз я объяснил это немного яснее.

licensed under cc by-sa 3.0 with attribution.