git как удалить файлы из репозитория, когда в папке на компьютере их нету, а на гитхабе почему-то есть
В созданной папке репозитория на компьютере этих файлов нету, а на github есть почему-то. Как обновить репозиторий, чтобы и на github было тоже самое, что и в моей папке, чтобы удалились файлы из репозитория которых в моей папке нету
Может обновить как-то?
Ответы (1 шт):
Смотрите, я на Ваш вопрос отвечу в три шага.
- Как сделать, чтобы на гитхабе было то же самое, что и в локальной папке (короткий ответ):
клонируем репозиторий к себе:
git clone [email protected]:mynick/myrepo.git
При этом репозиторий клонируется в отдельную папку. Которой на компьютере раньше не было.
Удаляем локально файлы, котрых быть не должно.
делаем коммит и пуш:
git commit -m "some files deleted"
git push
Гит может попросить подсказок насчет того, в какую ветку пушить и т.п., но в общем - последовательность действий именно такая.
В результате, в на гитхабе после Вашего коммита этих файлов не будет
Обратите внимание, файлов нет в последнем коммите. В истории гита эти файлы остались.
- Представим себе, что Вы случайно положили в гит файлики, которых там вообще не должно быть. Даже в истории. Ну, какие нибудь приватные ключики или файлы с паролями. И нужно в публичном репозитории убрать это в том числе из истории.
Тогда надо делать по другому. Нужно "переписать историю", лежащую в гит.
Если у Вас проблема "файл, которого не должно быть, лежит в последнем коммите" - то Вам нужен ключик --amend в команде git commit --amend
Если же файл успел "уйти в историю" - то понадобится rebase. Эта тема чуть чуть сложнее, и я советую прочесть документацию
- Почему вообще так? Почему нельзя задним числом удалить файл, не трогая "более поздних" коммитов?
Это происходит потому, что "подпись" коммита - это хеш от всех файлов, входящих в коммит, к тому же захешированный с предыдущим хешом. Поэтому нельзя что то поменять "задним числом": в результате хеши перестанут сходиться. Такй себе "натуральный блокчейн"