У меня есть несколько потерянных коммитов, случайно добавленных в GitHub.
Следуя этому ответу на вопрос контроля качества, я использую git reflog expire --expire-unreachable=now --all
, чтобы удалить их из git rev-list --all
. (Я пробовал использовать git gc --prune=now --aggressive
, но, возможно, репозиторий слишком велик, происходит сбой и все окна закрываются. Я использую Arch Linux и Kde6. Возможно, моей памяти в 16 ГБ немного мало.)
Тогда я попробовал git gc --prune=now
. После этого git show foo_orphan_commit
отобразит «фатальный: неоднозначный аргумент 'foo_orphan_commit': неизвестная ревизия или путь отсутствуют в рабочем дереве». Кажется, коммит был удален из локального репо.
Но в Github, когда коммит на удаление содержит сообщение «#1», то в выпуске Github #1 все равно отображается сообщение типа «Кто-то добавил коммит, который ссылается на эту проблему... foo_orphan_commit».
Тогда есть ли способ полностью удалить этот коммит из Github? Я ожидаю, что коммит не будет показан в Github с приведенным выше сообщением.
@Ry- Спасибо. Я попробовал это буквально минуту назад. Кажется, это работает для локального репозитория, но не для Github. Я буду следить за этим репо.
См. связанный документ.
У вас нет никакого контроля над очисткой коммитов на GitHub. Если у вас возникла проблема, вам необходимо обратиться к администраторам GitHub.
@matt Спасибо. Я использовал виртуального агента support.github.com/contact?tags=rr-remove-data, чтобы попросить их очистить мои кэшированные представления репозитория. Можно ли удалить коммиты из удаленного репозитория Github, если эти коммиты нельзя отобразить с помощью git show
локально?
Github помог удалить мои удаленные коммиты истории после того, как я открыл заявки на запросы. Их работа отличается высокой эффективностью.
@An5Drama Если проблема решена, вы можете ответить на свой вопрос, чтобы завершить цикл контроля качества.
Отлично. Отмечу как решенное.
В моем втором комментарии есть одна опечатка, которая до сих пор распознана. Простите за это. «следовать этому репо» должно быть «перейти по этой ссылке».
Эта проблема решена теперь с помощью приведенного выше комментария. ИМХО, локально git show
достаточно, чтобы проверить, существует ли коммит. Затем, после отправки на Github, когда ненужные коммиты будут удалены, мы можем связаться со службой поддержки GitHub с помощью виртуального агента. Это можно вызвать, введя «удалить фиксацию» в «Теме» приведенной выше ссылки.
Если вас волнует один коммит, вы выбираете URL-адрес коммита. В противном случае, как я и сделал, очистите «кэшированные представления» для всего репо.
Насколько велико репо (
du -sh .git
)? Возможно, вам не понадобится--aggressive
. Кроме того, вас волнует локальный или GitHub? Удаление коммита, на который нет ссылки, из вашего локального репозитория не повлияет на GitHub — см. docs.github.com/en/authentication/….