Рассмотрим следующую ситуацию:
- У вас есть клон Git-репозитория
- У вас есть локальные коммиты (коммиты, которые еще нигде не были переданы)
- Удаленный репозиторий имеет новые коммиты, которые вы еще не согласовали
Так что-то вроде этого:
Если вы выполните git pull
с настройками по умолчанию, вы получите что-то вроде этого:
Это потому что git выполнил слияние.
Хотя есть альтернатива. Вместо этого вы можете сказать pull, чтобы сделать ребаз:
git pull --rebase
и вы получите это:
На мой взгляд, перебазированная версия имеет множество преимуществ, которые в основном сосредоточены на поддержании чистоты вашего кода и истории, поэтому я немного удивлен тем фактом, что git выполняет слияние по умолчанию. Да, хеши ваших локальных коммитов будут изменены, но это похоже на небольшую цену за более простую историю, которую вы получаете взамен.
Я ни в коем случае не предполагаю, что это как-то плохо или неправильно по умолчанию. У меня просто возникают проблемы с размышлениями о причинах, по которым слияние может быть предпочтительным по умолчанию. Есть ли у нас понимание того, почему он был выбран? Есть ли преимущества, которые делают его более подходящим по умолчанию?
Основная мотивация для этого вопроса заключается в том, что моя компания пытается установить некоторые базовые стандарты (надеюсь, больше похожие на руководящие принципы) для того, как мы организуем и управляем нашими репозиториями, чтобы облегчить разработчикам доступ к репозиторию, с которым они ранее не работали. Я заинтересован в том, чтобы сделать так, чтобы мы обычно делали перебаз в такой ситуации (и, вероятно, рекомендовали разработчикам по умолчанию переустанавливать свои глобальные конфигурации), но если бы я был против, я, конечно, спросил бы, почему rebase не ' по умолчанию, если это так здорово. Поэтому мне интересно, есть ли что-то, что я пропускаю.
Было высказано предположение, что этот вопрос является дубликатом Почему многие веб-сайты предпочитают «git rebase», а не «git merge»? ; однако этот вопрос несколько противоположен этому. В нем рассматриваются преимущества перебазирования перед слиянием, а в этом вопросе говорится о преимуществах слияния перед перебазированием. Ответы там отражают это, сосредотачиваясь на проблемах слияния и преимуществах rebase.