Как удалить конкретную ревизию GitHub gist?

Я создал Gist на GitHub, и я видел информацию, которую я не хочу, чтобы кто-то видел. С тех пор я обновил файл, но все еще могут получить доступ к старой редакции файла.

кроме удаления сути, есть ли способ удалить эту конкретную ревизию определенно?

Я видел, что я не единственный, кто имеет такую проблему (Git: удалить одну удаленную ревизию) но мне не удалось удалить ревизию. Процесс, указанный здесь, кажется, помогает удалите некоторые файлы. Я хочу удалить всю редакцию.

5 ответов


Github имеет страницу справки об удалении конфиденциальных данных:

http://help.github.com/removing-sensitive-data/

поскольку gists - это просто репозитории git, вы должны иметь возможность локально клонировать свой gist, выполнить очистку там и сделать принудительный толчок, чтобы перезаписать версию github с очищенным РЕПО.

да, подумав об этом: если <commit> это фиксация, которую вы хотите "удалить", do

 git rebase -i <commit>^

отметьте строку для <commit> as edit, сохранить и выйти.

git настроит рабочий каталог в состояние после того, как вы comitted <commit>. Исправьте файл, используйте git add и git commit --amend чтобы исправить фиксацию. Тогда сделай git rebase --continue. Если единственное, что сделал следующий коммит, - это удалить конфиденциальные данные, он, вероятно, будет автоматически удален, потому что он не содержит никаких изменений после Теперь измененного коммита.

вы git push -f чтобы принудительно обновить (потому что теперь это не быстрая перемотка вперед, это означает, что он меняет уже опубликованную историю git).


принятый ответ хорош, но немного трудно следовать. Вот тот же ответ, но немного слаще.

как говорит Тилман Фогель, gists - это просто репозитории, и поэтому этот подход работает как для репозиториев github, так и для gists.

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

первое, что ремонт должен быть сделан на вашей локальной машине (не в github). Для этого начните с клонирования gist локально. Страница gist на github должна показать вам, как создать частный клон, если вы нажмете на URL-адрес частного клона. Что-то вроде:

git clone git@gist.github.com:421xxx1.git gist-421xxx1

это дает вам локальную копию, которую вам нужно перебазировать (что означает версии.)

cd gist-421xxx1
git rebase -i eexxaa^

где eeccaa-это (первая) версия, содержащая пароль. Вы можете получить это число из столбца суть изменения. Требуется^. Команда означает: "позвольте мне изменить версии с eexxaa на последние, интерактивно. Команда открывает редактор, заполненный командой в каждой строке для каждой версии РЕПО. Команда по умолчанию "pick" означает "использовать или сохранить эту версию".

первые строки в Редакторе должны выглядеть что-то вроде

pick eexxaa    <- the version with the password
pick ffxxbb    <- the first version without the password

изменить на

pick eexxaa    
squash ffxxbb 

т. е. Измените слово "pick" на "squash" в версии без пароля. Это попросит ребазу раздавить новую (без пароля) версию в старую (перенос пароля), по существу удалив версию eexxaa. Очевидно, что ваши версии будут отличаться от eexxaa или ffxxbb не буквально использовать eexxaa или ffxxbb в любом месте!

как отмечает @kand, вы должны squash каждая версия, которая содержала пароль:.

в Редакторе сохранить и выйти (если это vi: x). Теперь ребаза должна открыть новый редактор, показывающий сообщения фиксации для двух версий и запрашивающий одно комбинированное сообщение фиксации. Для сути эти сообщения, скорее всего, будут пустыми, но вам нужно что-то положить здесь, или ребаз будет прерван. Введите сообщение, сохраните его и закройте, и перезагрузка должна завершиться.

теперь у вас есть репозиторий без версии, содержащей пароль. Получить это вернемся к сути использования:

git push -f

это заставит изменения в репозитории github. Нажмите Обновить, и вы сможете проверить в браузере, что оскорбительная версия ушла из столбца ревизий с правой стороны.

вот оно!


Если вы хотите полностью удалить что-то из репозитория, вам нужно использовать git filter-branch.

http://git-scm.com/docs/git-filter-branch


если вы не обеспокоены отображением каких-либо изменений в gist, вы можете сделать следующее, Чтобы удалить всю историю и просто показать одну ревизию.

git clone some-gist-repo
cd some-gist-repo
git rebase -i --root $tip

вы сможете увидеть все коммиты для этой сути в своем редакторе. Просто выберите первый и замените все остальное на s или squash. После этого сохраните и добавьте сообщение фиксации, а затем сделайте принудительный толчок, чтобы освоить это, и Вы хороши.

git push -f origin master

единственная редакция, которая будет быть видимым-это добавление файла(ов), и это все.


добавление к ответу meesern по. Когда вы пытаетесь раздавить или исправить и перебазировать--continue, вам необходимо добавить комментарий или --allow-empty-message. Это занимает много времени, и каким-то образом мои коммиты не ушли из списка ревизий gist, сделав это.

Я нашел более простое решение: Вы можете просто удалить ненужные строки фиксации в списке задач rebase,:wq!, git rebase --continue и git push -f.