Как удалить конкретную версию github? - PullRequest
30 голосов
/ 06 мая 2011

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

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

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

Ответы [ 5 ]

34 голосов
/ 06 мая 2011

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

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

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

Да, подумав об этом: если <commit> - это коммит, который вы хотите «удалить», выполните

 git rebase -i <commit>^

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

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

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

23 голосов
/ 05 декабря 2012

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

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

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

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

git clone git@gist.github.com: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» наверсия без пароля.Это попросит ребаз, чтобы раздавить новую (без пароля) версию в старую (с переносом пароля), по существу удалив версию eexxaa.Очевидно, что ваши версии будут отличаться от eexxaa или ffxxbb. Буквально нигде не используйте eexxaa или ffxxbb!

Как отмечает @kand, вы должны squash каждую версию, содержащую пароль.

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

Теперь у вас есть хранилище без версии, содержащей пароль.Чтобы вернуть это к сути дела, используйте:

git push -f

Это приведет к изменениям в репозитории github.Нажмите «Обновить», и вы сможете проверить в браузере, что версия с ошибками вышла из колонки правок справа.

Вот и все!

2 голосов
/ 10 марта 2017

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

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

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

git push -f origin master

Единственная ревизия, которая будет видна, - это добавление файла (ов) и вот оно.

2 голосов
/ 06 мая 2011

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

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

0 голосов
/ 21 июня 2016

Добавление к ответу Мизерна.Когда вы пытаетесь сдавить или исправить, а затем повторить - продолжайте, вам необходимо добавить комментарий или --allow-empty-message.Это отнимает много времени, и почему-то мои коммиты не уходили из списка ревизий гистограммы, делая таким образом.

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

...