Это ожидаемое поведение.
Git - это, по сути, простой ориентированный граф, где ветви - это автоматически расширяемые имена (также известные как ссылки) для коммитов и, следовательно, головной узел в некотором поддереве графа. Сброс - это один из методов изменения, который фиксирует имена веток.
Аналогичным образом, когда выполняется rebase, изменения, которые приводят к другому результату вычисления ha sh в отдельных фиксациях. Родительские хэши также являются частью вычисления , поэтому сброс фиксации влияет на всех потомков. Затем ветвь обновляется, чтобы указать на начало нового дерева коммитов, в то время как сами исходные коммиты фактически не удаляются из набора всех коммитов и их все еще можно найти через reflog .
После сброса или перебазирования эти устаревшие (в том числе отброшенные) коммиты являются «сиротами» тогда и только тогда, когда на них не могут ссылаться никакие ссылки + . На коммиты по-прежнему можно ссылаться с помощью commit ha sh, поскольку они все еще существуют на диске; однако, если нет прямых ссылок на эти коммиты, и они не являются предком каких-либо ссылок, они не должны отображаться в команде журнала.
+ Git ссылки (также известные как ссылки) включают ~ ветки ~, ~ теги ~ и ~ sta sh записи ~.
Если коммиты не «осиротевший» и, следовательно, видимый в обычном журнале, существует ветвь или тег, который необходимо обновить. Сюда также входят ветви удаленного отслеживания и записи sh. Обновите и / или удалите эти ссылки по мере необходимости. Если ветка, удерживающая эти коммиты от «осиротевания», уже отправлена и находится на основной линии ... что ж, будем надеяться, что это не так.
Удаление фиксации с диска, после он стал сиротой, это можно сделать с помощью команды prune , которая может удалить всех сирот. Git обычно выполняет периодi c G C хозяйственное обслуживание, поэтому обычно это не требуется.
Если фиксация уже была отправлена, этот процесс должен быть распространен на каждый репозиторий, который теперь есть изменение. Если это включает принудительное продвижение ветвей основной ветки, это может быть «очень раздражающим» для других разработчиков и / или неосуществимым, в зависимости от того, сколько других коммитов являются потомками. Это следует делать только в крайнем случае, так как фиксация (и любые данные в ней) уже просочились и возможна зависимость других удаленных коммитов.