Как я могу удалить коммиты git, которые уже были сброшены, но все еще отображаются в истории?

Мне нужно избавиться от коммитов, которые я уже сбросил, и принудительно отправить в исходное положение; они продолжают появляться всякий раз, когда я извлекаю или клонирую удаленное репо.

Я отправил коммиты в среду DEV Pantheon, развернутую как в TEST, так и в LIVE средах. Позже я сделал полный сброс до определенного коммита и принудительно отправил его в исходное положение. Ускоренная перемотка вперед: когда я снова клонировал репозиторий, я все еще могу видеть коммиты, которые, как мне казалось, я стер из истории.

Я не вижу их в терминале с git log, но мне нравится использовать GitKraken для визуального просмотра моей истории git, и там они появляются все время. Я попытался стереть локальное репо, потому что думал, что это просто локальная вещь — в среде Pantheon DEV они исчезли после принудительного нажатия.

Ничто, кажется, решает это для меня. Пожалуйста помоги! Мое ОКР мешает мне игнорировать его и продолжать работать и добавлять коммиты. Мне нужно, чтобы моя история показывала только ту фиксацию, в которой в данный момент находится HEAD, и чтобы коммиты, предшествующие этому, исчезли из поля зрения.

Вот как это выглядит, когда я открываю репозиторий с помощью GitKraken ——» Снимок экрана


person Byron    schedule 04.05.2019    source источник


Ответы (1)


Git отслеживает все коммиты, когда-либо сделанные в своей базе данных (внутри папки .git), пока они в конечном итоге не будут удалены сборщиком мусора, когда они больше не используются. Визуальные инструменты, такие как GitKraken, обычно показывают все коммиты, доступные через именованную ветку или тег, независимо от того, являются ли ветка или тег локальными или из известного удаленного репозитория.

Что вы, вероятно, захотите сделать, так это удалить ветки или теги, которые связаны с теми коммитами, которые вас больше не интересуют. Это приведет к тому, что они больше не будут отображаться в графических инструментах, хотя они останутся в вашей базе данных .git до тех пор, пока сборщик мусора 'ed (обычно это то, что вам нужно: избежать визуальных отвлекающих факторов, с которыми вы сталкиваетесь, но сохраняет данные, если вам когда-нибудь понадобится их восстановить).

Чтобы удалить ветки, взгляните на этот пост в ветке удаление. Синтаксис для удаления тегов тот же, но вы можете проверить этот пост, если вам нужны конкретные примеры тегов.

person aryzing    schedule 04.05.2019
comment
Я все еще гит-нуб, и это поучительно. Спасибо за ваш ответ! Только что попробовал git push origin :refs/tags/pantheon_live_13 и получил это сообщение об ошибке remote: PANTHEON ERROR: Tag removal rejected. The tag "pantheon_live_13" is a deployment tag and therefore cannot be deleted. You should push a new deployment tag instead. error: hook declined to update refs/tags/pantheon_live_13 Думал, что это связано с удалением тега live, но получил такое же сообщение об ошибке, когда попытался: git push origin :refs/tags/pantheon_test_30 - person Byron; 05.05.2019
comment
Я считаю, что вам нужно разобраться с вашим хостингом git. Что касается git, то теперь у вас есть инструменты для достижения желаемого. - person aryzing; 05.05.2019
comment
@Byron Этот отказ исходит от хука Git, созданного вашей службой хостинга Git. Это не ограничение Git, это ограничение, установленное вашим хостом. - person Daniel Mann; 05.05.2019
comment
Спасибо вам обоим, aryzing + @DanielMann! Я связался со службой поддержки Pantheon, и да, очевидно, платформа разработана таким образом, что теги нельзя удалять. Я уверен, что я не одинок (по крайней мере, я надеюсь), поэтому позвольте мне быть уязвимым от имени других, ищущих выход. Теперь у меня вопрос: как мне сделать так, чтобы эти коммиты не просто зависали (drive.google.com/file/d/1FAMZGG7BxfPMnz2-1q3pkLNv07iu-evU/view)? Я переместил HEAD в последний коммит, как я могу заставить два других, выделенных синим, встать в очередь? - person Byron; 05.05.2019