GitHub Source view показывает коммит, который больше не существует - PullRequest
4 голосов
/ 24 июня 2011

Я переписал историю репозитория GitHub две недели назад (перебазирование и некоторые выборки вишни) и принудительно отправил его обратно в GitHub через

git push -f origin master

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

Мой репозиторий имеет только одну ветвь с именем master.

Теперь к моей проблеме. Исходное представление GitHub для моего репозитория показывает по крайней мере один коммит, который больше не должен существовать из-за переписывания истории. И действительно, он не существует ни в моем локальном, ни в журнале коммитов GitHub (но он является частью моего локального рефлога). Как мне избавиться от этого коммита и, возможно, от других, которые есть в моем удаленном репозитории GitHub? Есть ли способ очистить удаленный репозиторий и удалить те «недоступные» коммиты, которые не являются частью журнала коммитов?

Кстати, если я клонирую репозиторий GitHub, мошеннический коммит отсутствует в клоне. git show <SHA1> возвращает fatal: bad object.

Мой вопрос очень похож на SO 4367977 , но решение этого вопроса "ожидание сборки мусора в GitHub", очевидно, не сработало. Коммит-коммиты по-прежнему работают через 6 месяцев.

Удаление хранилища и воссоздание его должно решить проблему, но это не очень элегантно.

Заранее спасибо!

1 Ответ

0 голосов
/ 25 июня 2011

коммиты не молча исчезают из хранилища из-за переписывания истории, они просто получают больше не ссылается .

Загрузка в репозиторий означает загрузку списка объектов, а затем установку некоторых тегов и / или веток для некоторого коммита. Это не означает, что удаляет любые коммиты (и другие объекты) из целевого репозитория, которые не используются ветвями, как сейчас .

Как вы отметили путем клонирования, фиксация больше недоступна. Теоретически, в конечном итоге это должен быть сбор мусора, но, как вы заметили, это может произойти не скоро - возможно, никогда. (Может быть, кто-то разветвился от коммита, упомянутого в другом вопросе, который вы связали, и это мешает сборке мусора?)

Если в «неправильном» коммите есть какие-либо конфиденциальные данные, обратитесь в службу поддержки github, чтобы удалить их. Если нет, просто игнорируйте коммит - он не причинит вреда, сидя в хранилище.

...