Этот ответ был изменен, поскольку мое понимание, диаграммы и выводы были неверными.
git pull
вызывает коммиты слияния, потому что происходит слияние git. Это можно изменить, установив в ваших ветках использование перебазирования вместо слияния. Использование перебазирования вместо слияния при вытягивании обеспечивает более линейную историю для общего репозитория. С другой стороны, коммиты слиянием показывают параллельную разработку ветки.
Например, два человека работают в одной ветке. Ветвь начинается как:
...->C1
Первый человек заканчивает свою работу и толкает в ветку:
...->C1->C2
Второй человек заканчивает свою работу и хочет подтолкнуть, но не может, потому что ему нужно обновить. Локальный репозиторий для второго человека выглядит так:
...->C1->C3
Если вытягивание настроено на слияние, репозиторий второго лица будет выглядеть так.
...->C1->C3->M1
\ /
->C2->
Где M1 - это фиксация слияния. История этой новой ветки будет отправлена в репо. Если бы вместо этого был установлен pull для перебазирования локального репо, это выглядело бы так:
...->C1->C2->C3
Нет фиксации слияния. История сделана более линейной.
Оба варианта отражают историю филиала. git позволяет вам выбрать, какую историю вы предпочитаете.
Действительно, есть места, где перебазирование может вызвать проблемы с удаленными ветвями. Это не из тех случаев. Мы предпочитаем использовать rebase, поскольку он упрощает и без того сложную историю ветвей, а также показывает версию истории относительно общего репозитория.
Вы можете установить branch.autosetuprebase = always, чтобы git автоматически устанавливал ваши удаленные ветки как rebase вместо master.
git config --global branch.autosetuprebase always
Этот параметр заставляет git автоматически создавать параметр конфигурации для каждой удаленной ветки:
branch.<branchname>.rebase=true
Вы можете установить это самостоятельно для своих удаленных веток, которые уже настроены.
git config branch.<branchname>.rebase true
Я хотел бы поблагодарить @LaurensHolst за вопросы и продолжение моих предыдущих утверждений. Я определенно узнал больше о том, как git работает с коммитами pull и merge.
Для получения дополнительной информации о коммитах слияния вы можете прочитать участие в проекте в ProGit-Book . Раздел Private Small Team показывает коммиты слияния.
git log --no-merges