git как удалить файлы из репозитория, когда в папке на компьютере их нету, а на гитхабе почему-то есть

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

Может обновить как-то?


Ответы (1 шт):

Автор решения: S.H.

Смотрите, я на Ваш вопрос отвечу в три шага.

  1. Как сделать, чтобы на гитхабе было то же самое, что и в локальной папке (короткий ответ):

клонируем репозиторий к себе:

    git clone [email protected]:mynick/myrepo.git

При этом репозиторий клонируется в отдельную папку. Которой на компьютере раньше не было.

Удаляем локально файлы, котрых быть не должно.

делаем коммит и пуш:

    git commit -m "some files deleted"
    git push 

Гит может попросить подсказок насчет того, в какую ветку пушить и т.п., но в общем - последовательность действий именно такая.

В результате, в на гитхабе после Вашего коммита этих файлов не будет

Обратите внимание, файлов нет в последнем коммите. В истории гита эти файлы остались.

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

Тогда надо делать по другому. Нужно "переписать историю", лежащую в гит.

Если у Вас проблема "файл, которого не должно быть, лежит в последнем коммите" - то Вам нужен ключик --amend в команде git commit --amend

Если же файл успел "уйти в историю" - то понадобится rebase. Эта тема чуть чуть сложнее, и я советую прочесть документацию

  1. Почему вообще так? Почему нельзя задним числом удалить файл, не трогая "более поздних" коммитов?

Это происходит потому, что "подпись" коммита - это хеш от всех файлов, входящих в коммит, к тому же захешированный с предыдущим хешом. Поэтому нельзя что то поменять "задним числом": в результате хеши перестанут сходиться. Такй себе "натуральный блокчейн"

→ Ссылка