Опасности перемещения

Но даже перебазирование, при всех своих достоинствах, не лишено недостатков, которые можно выразить одной строчкой:

Не перемещайте коммиты, уже отправленные в публичный репозиторий.

Если вы будете придерживаться этого правила, всё будет хорошо. Если не будете, люди возненавидят вас, а ваши друзья и семья будут вас презирать.

Когда вы что-то перемещаете, вы отменяете существующие коммиты и создаёте новые, похожие на старые, но являющиеся другими. Представьте, что вы отправили свои коммиты куда-нибудь ( Push to origin), и другие получили их себе ( Получить из origin), и на их основе выполнили свои доработки. Теперь вы переделываете эти коммиты командой Перебазировать..., и выкладываете их снова. Это значит, что ваши коллеги будут вынуждены заново выполнять слияние для своих доработок. В итоге, когда вы в очередной раз попытаетесь включить их работу в свою, вы получите путаницу.

Давайте рассмотрим пример того, как перемещение публично доступных наработок может вызвать проблемы. Представьте себе, что вы склонировали себе репозиторий с центрального сервера и поработали в нём. Ваша история коммитов выглядит так:

Теперь кто-то другой работает с репозиторием, используя слияние, и отправляет результаты своей работы на сервер.

Вы получаете их к себе и сливаете новую удалённую ветку со своей работой. Тогда ваша история выглядит следующим образом.

Далее тот, кто выложил содержащий слияние коммит, решает вернуться, и вместо слияния ( Слить... ) выполнить перебазирование своей работы ( Перебазировать...). Он выполняет это и отправляет изменения на сервер, перезаписывая его историю.

Когда вы получаете изменения с сервера( Получить из origin), вы извлекаете этот новый коммит.

Теперь вы оба в неловком положении. Если вы выполните Получить и слить, вы создадите коммит слияния, включающий обе линии истории, и ваш репозиторий будет выглядеть следующим образом.

Если вы посмотрите на свою историю, вы увидите два коммита с одинаковыми авторами, датой, и сообщением, что может сбить с толку.

Помимо этого, если вы отправите ( Push to origin) в таком состоянии свою историю на удалённый сервер, вы вернете все эти перебазированные коммиты (которые остались у вас, но которых нет на сервере) на центральный сервер, что ещё больше всех запутает.