Как удалить конкретную ревизию github gist?
Я создал Gist на GitHub, и я увидел информацию, которую я не хочу видеть.
Я обновил файл с тех пор, но все могут получить доступ к старой версии файла.
Кроме удаления Gist, существует ли способ удалить определенную версию определенно?
Я видел, что я не единственный, у кого есть такая проблема (Git: удалить одну удаленную версию), но мне не удалось удалите ревизию.
Указанный здесь процесс помогает удалить некоторые файлы. Я хочу удалить всю ревизию.
Ответы
Ответ 1
В Github есть страница справки об удалении конфиденциальных данных:
http://help.github.com/removing-sensitive-data/
Поскольку репозитории - это просто репозитории git, вы можете локально клонировать ваш gist, выполнять очистку и делать принудительное нажатие, чтобы перезаписать версию github очищенным репо.
Да, подумав об этом: если <commit>
- это фиксация, которую вы хотите удалить, выполните
git rebase -i <commit>^
отметьте строку для <commit>
как edit
, сохраните и закройте.
git установит рабочий каталог в состояние после того, как вы выполните <commit>
. Исправьте файл, используйте git add
и git commit --amend
, чтобы исправить фиксацию. Тогда do git rebase --continue
. Если единственная вещь, следующая фиксация делала, заключалась в том, чтобы удалить конфиденциальные данные, она, вероятно, будет автоматически удалена, потому что она не будет содержать никаких изменений после исправленного коммита.
Затем сделайте a git push -f
, чтобы принудительно обновить (потому что теперь он не быстрый, что означает, что он уже опубликовал историю git).
Ответ 2
Принятый ответ хорош, но немного сложно следовать. Здесь тот же ответ, но немного слаще.
Как говорит Тилман Фогель, gists - это просто хранилища, и поэтому этот подход работает как для репозиториев github, так и для gists.
Предположим, что существует только одна версия, содержащая пароль, который вы не хотите показывать. Вы проверили новую версию с удаленным паролем и хотите избавиться от предыдущей версии. Вы должны уметь адаптировать этот процесс, если есть несколько моментов, указывающих пароль.
Во-первых, ремонт должен выполняться на вашей локальной машине (не в github). Для этого начните с клонирования gist локально. Страница gistub на github должна показать вам, как создать частный клон, если вы нажмете на собственный URL-адрес клонирования. Что-то вроде:
git clone [email protected]:421xxx1.git gist-421xxx1
Это дает вам локальную копию, которую вам нужно переустановить (что означает гашение версий).
cd gist-421xxx1
git rebase -i eexxaa^
Где eeccaa - это (первая) версия, содержащая пароль. Вы можете получить это число из столбца ревизий страницы. Требуется ^. Команда означает "позвольте мне изменить инстанции от eexxaa до последней, интерактивно. Команда открывает редактор, заполненный командой в каждой строке для каждой версии репо. Команда по умолчанию -" выбрать ", означающую" использование или сохранение этой версии".
Первые строки в редакторе должны выглядеть примерно так:
pick eexxaa <- the version with the password
pick ffxxbb <- the first version without the password
Измените это на
pick eexxaa
squash ffxxbb
т.е. Измените слово "pick" на "squash" в версии без пароля. Это попросит rebase выкачать новую (без пароля) версию в старый (с паролем), по сути удалив версию eexxaa. Очевидно, что ваши версии будут отличными от eexxaa или ffxxbb, а не буквально использовать eexxaa или ffxxbb в любом месте!
Как отмечает @kand, вы должны squash
каждую версию, содержащую пароль.
В редакторе save и quit (если это vi: x). Теперь rebase должен открыть новый редактор, отображающий сообщения фиксации для двух версий и запрашивая одно комбинированное сообщение о коммит. Для сущности эти сообщения, скорее всего, будут пустыми, но вам нужно что-то там положить или перебазировать будет прервано. Введите сообщение, сохраните его и закройте, и переполнение должно завершиться.
Теперь у вас есть репозиторий без версии с паролем. Чтобы вернуться к использованию, используйте:
git push -f
Это приведет к изменениям в репозитории github. Хит обновления, и вы должны иметь возможность проверить в браузере, что оскорбительная версия ушла из колонки ревизий с правой стороны.
Вот оно!
Ответ 3
Если вы хотите полностью удалить что-то из репозитория, вам нужно использовать ветвь фильтра git.
http://git-scm.com/docs/git-filter-branch
Ответ 4
Если вам не интересно показывать какие-либо изменения в сущности, вы можете сделать следующее, чтобы устранить всю историю и просто показать одну ревизию.
git clone some-gist-repo
cd some-gist-repo
git rebase -i --root $tip
Вы могли бы увидеть все коммиты для этой сути в своем редакторе. Просто выберите первый и замените все остальное s
или squash
. После этого сохраните и добавьте сообщение фиксации, а затем выполните силовое нажатие, чтобы справиться с этим, и вы хорошо.
git push -f origin master
Единственная ревизия, которая будет видна, - это добавление файла (ов), и это его.
Ответ 5
Добавление к основному ответу.
Когда вы пытаетесь выполнить сквош или исправление и rebase - продолжите, вы должны добавить комментарий или --allow-empty-message
. Это отнимает много времени, и как-то мои коммиты не исчезли из списка пересмотра gist, сделав это.
Я нашел более простое решение:
Вы можете просто удалить ненужные строки фиксации в списке дел переполнения, :wq!
, git rebase --continue
и git push -f
.