Вероятно, это потому, что вместо слияния Git сделал «ускоренную перемотку вперед».
Допустим, у вас это есть.
A - B [master]
\
C - D [feature]
Ветви Git - это просто метки, указывающие на коммит.Коммиты A и B находятся на хозяине.И встроенные функции C и D.
Когда вы git merge feature
Git замечаете, что вместо слияния он может просто переместиться master
в D. Объединение не требуется.
A - B
\
C - D [feature]
[master]
излом в B - C является искусственным, поэтому вы видите линейную историю.
A - B - C - D [feature]
[master]
Это «ускоренная перемотка вперед».Git упомянул бы об этом, когда вы сделали git merge.
В отличие, скажем, вы сделали некоторую работу над мастером до слияния.
A - B - E [master]
\
C - D [feature]
Поскольку мастер и функция "разошлись" GitНеобходимо объединить две базы кода.git merge feature
создаст коммит слияния, а ветвь будет сохранена в истории.
A - B - E - F [master]
\ /
C - D [feature]
По этой причине используйте git merge --no-ff
, что означает «нет ускоренной перемотки вперед», чтобы гарантировать, что всегда есть «пузырь функции»даже после того, как ветка (на самом деле просто метка ветки) удаляется.Затем, просто взглянув на историю, вы узнаете, что C и D были созданы как логическая группа, и сообщение о коммите слияния на F может предоставить контекст, почему они были выполнены.