Подтвердить что ты не робот

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

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

Кроме удаления Gist, существует ли способ удалить определенную версию определенно?

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

4b9b3361

Ответ 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.