Я хотел бы представить другой взгляд на то, что на самом деле означает "git pull --rebase", потому что иногда кажется, что он теряется.
Если вы когда-либо использовали Subversion (или CVS), вы можете привыкнуть к поведению «svn update». Если у вас есть изменения для фиксации, и фиксация завершается неудачей, потому что изменения были внесены в апстрим, вы "svn update". Subversion работает, объединяя вышестоящие изменения с вашими, что может привести к конфликтам.
То, что только что сделал Subversion, было по сути "pull --rebase". Акт переформулировки ваших локальных изменений в соответствии с более новой версией - это «перебазирование» его части. Если вы выполнили «svn diff» до неудачной попытки коммита и сравнили полученный результат с выводом «svn diff», то разница между этими двумя разностями - это то, что сделала операция перебазирования.
Основное различие между Git и Subversion в этом случае заключается в том, что в Subversion «ваши» изменения существуют только как не зафиксированные изменения в вашей рабочей копии, в то время как в Git у вас есть фактические коммиты локально. Другими словами, в Git вы раздвоили историю; ваша история и история восходящего потока разошлись, но у вас есть общий предок.
По моему мнению, в обычном случае, когда ваша локальная ветвь просто отражает ветвь вверх по течению и непрерывно развивает ее, правильная вещь всегда должна быть "--rebase", потому что это то, что вы на самом деле семантически делает . Вы и другие взламываете намеченную линейную историю ветви. Тот факт, что кто-то еще немного толкал до вашей попытки толчка, не имеет значения, и кажется, что каждый такой случай хронометрирования может привести к слиянию в истории.
Если вы действительно чувствуете необходимость того, чтобы что-то было ветвью по какой-либо причине, то, на мой взгляд, это другое дело. Но если у вас нет конкретного и активного желания представлять свои изменения в форме слияния, поведение по умолчанию, на мой взгляд, должно быть «git pull --rebase».
Пожалуйста, рассмотрите других людей, которым необходимо наблюдать и понимать историю вашего проекта. Вы хотите, чтобы история была завалена сотнями слияний повсюду, или вы хотите, чтобы только несколько избранных слияний представляли собой реальные слияния преднамеренных расходящихся усилий по развитию?