2015-10-20 2 views
2

Предположим, что я внес некоторые изменения, совершил их, а затем переместил мое сообщение в удаленный репозиторий. Затем я решил, что забыл прокомментировать это или что-то неправильно, и я хочу сделать мягкий сброс, чтобы редактировать и переписывать свои изменения.Почему это опасно для принудительного нажатия на удаленный репозиторий?

Что делает его «опасным» для принудительного нажатия на удаленный репозиторий?

ответ

3

Git пытается действительно трудно не перезаписывает никаких изменений, так и в вашей обычной изо дня в день, если вы пытаетесь нажать на удаленном хранилище, чья голова ссылка отличается от вашей локальной ссылки HEAD, Git будет шаг это подойдет.

Когда вы используете --force, Гит снимает тренировочные колеса и предполагает, что вы знаете, что делаете, даже если вы не полностью понимаете и не оцениваете последствия своих действий.

Чтобы проиллюстрировать ваш пример, это то, что ваш удаленный репозиторий имеет на нем:

<-- [] <-- [] <-- [HEAD] 

... и это ваш местный после того, как вы толкали, но прежде чем вы обнаружили свою ошибку:

<-- [] <-- [] <-- [HEAD] 

Когда вы исправили ошибку, используя --amend, у Git на самом деле есть две фиксации, относящиеся к предыдущей, но только одна из них относится к канонической ссылке HEAD.

<-- [] <-- [] <-- [HEAD] 
      \ 
      \<-- [(old HEAD)] 

ША вашей новой ссылки ГОЛОВЫ не соответствует тому, что находится на удаленном хранилище, поэтому Git откажет толкать, так как он думает, что вы собираетесь потерять данные.

Когда вы сила это, однако, Git доверяет вам и берет новую HEAD как каноническую ссылку. Посредством этого ссылка на старое поручение HEAD теряется.

<-- [] <-- [] <-- [HEAD] 

Это опасно, так как:

  • Вы могли потеряли данные; вероятность того, что вы этого не сделали, если это просто --amend, но все же возможно

  • . Любой, кто базируется на своей работе со старой ссылки HEAD, теперь должен перезарядить свою работу, что может привести к большому количеству неоправданных изжога.

Коммуникация может смягчить вторую часть, но первая часть требует более осторожного подхода при нажатии на усилие. Только принудительное нажатие, если вы абсолютно уверены, что то, что вы нажимаете, не приведет к потере данных или информации.

0

Одним из основных факторов риска использования «-force» является то, что он не видит фиксацию, которую кто-то другой потеряет!

Для предотвращения такого случая хорошей практикой является никогда не использовать «-force», а предпочитать «-force-with-lease», которые гарантируют, что вы взяли фиксацию в своем репозитории, прежде чем сознательно проигнорировать ее. .