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