Git пытается действительно трудно не перезаписывает никаких изменений, так и в вашей обычной изо дня в день, если вы пытаетесь нажать на удаленном хранилище, чья голова ссылка отличается от вашей локальной ссылки HEAD, Git будет шаг это подойдет.
Когда вы используете --force
, Гит снимает тренировочные колеса и предполагает, что вы знаете, что делаете, даже если вы не полностью понимаете и не оцениваете последствия своих действий.
Чтобы проиллюстрировать ваш пример, это то, что ваш удаленный репозиторий имеет на нем:
<-- [] <-- [] <-- [HEAD]
... и это ваш местный после того, как вы толкали, но прежде чем вы обнаружили свою ошибку:
<-- [] <-- [] <-- [HEAD]
Когда вы исправили ошибку, используя --amend
, у Git на самом деле есть две фиксации, относящиеся к предыдущей, но только одна из них относится к канонической ссылке HEAD.
<-- [] <-- [] <-- [HEAD]
\
\<-- [(old HEAD)]
ША вашей новой ссылки ГОЛОВЫ не соответствует тому, что находится на удаленном хранилище, поэтому Git откажет толкать, так как он думает, что вы собираетесь потерять данные.
Когда вы сила это, однако, Git доверяет вам и берет новую HEAD как каноническую ссылку. Посредством этого ссылка на старое поручение HEAD теряется.
<-- [] <-- [] <-- [HEAD]
Это опасно, так как:
Вы могли потеряли данные; вероятность того, что вы этого не сделали, если это просто --amend
, но все же возможно
. Любой, кто базируется на своей работе со старой ссылки HEAD, теперь должен перезарядить свою работу, что может привести к большому количеству неоправданных изжога.
Коммуникация может смягчить вторую часть, но первая часть требует более осторожного подхода при нажатии на усилие. Только принудительное нажатие, если вы абсолютно уверены, что то, что вы нажимаете, не приведет к потере данных или информации.