Как я могу удалить файлы в хранилище, сохраняя (и игнорируя) их локально? - PullRequest
4 голосов
/ 01 июля 2010

Я ошибочно добавил некоторые локальные файлы проекта в репозиторий git и зафиксировал / отправил их.

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

Какой лучший способ сделать это?

Ответы [ 3 ]

4 голосов
/ 01 июля 2010

Самым чистым решением является следующее:

  • git rm --cached дополнительные файлы локально (обратите внимание на опцию --cached, чтобы сохранить эти файлы в рабочем каталоге),
  • добавьте их в файл .gitignore и git commit -A -m "..." после этого
  • нажмите вашу ветку (история не переписывается, но предыдущая история сохранит ссылки на эти файлы).

Если вы думаете, что из вашего удаленного репо вышло не слишком много людей (в идеале, никто), вы можете:

  • исправить вашу историю коммитов локально
    (git rebase --interactive first-commit-with-files^: '^' ссылается на родительский коммит первого, где вы представили плохие файлы.
    git rm --cached файлы, затем воспроизведите другие коммиты, если некоторые из них также не внесли изменения в те же файлы.
    Другие решения здесь - git filter-branch или git rebase),
  • толчок - форсирует вашу ветвь,
    (но будьте готовы указать людям на раздел ВОССТАНОВЛЕНИЕ ОТ UPSTREAM REBASE справочной страницы git rebase).
    (см. определение восходящего потока здесь )
1 голос
/ 01 июля 2010

Хорошо добавьте их в .gitignore (имена файлов, разделенные строкой в ​​главном каталоге репо, а затем следуйте этому руководству: http://help.github.com/removing-sensitive-data/. Наконец git push -f, чтобы принудительно перезаписать удаленное репо.

1 голос
/ 01 июля 2010
  1. Создайте новую ветку с фиксацией файлов.
  2. Сброс первоначальной ветви обратно туда, где она была.
  3. Выполните команду push -f, чтобы принудительно вернуть пульт назад (ВНИМАНИЕ: это «сломает» репозитории, в которых уже зафиксированы эти коммиты - это отмена, но ручной труд)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...