Git: Как переписать удаленную историю?
Коллега случайно передал большой двоичный файл, который не имеет контроля над исходным кодом, в результате чего хранилище стало необычно большим. Затем он отправил этот коммит на общий сервер, и с тех пор было множество других коммитов и толчков. Я ищу способ отменить этот коммит или просто удалить двоичный файл из него на удаленном компьютере, чтобы репозиторий восстановил свой обычный размер.
Наш общий пульт находится по адресу buildmbla.com, поэтому у меня нет прямого доступа к нему через оболочку, просто git.
Предполагая, что это возможно, каковы будут последствия для других нисходящих узлов? Нужно ли будет клонировать свежий репозиторий? (Это нормально, если это так)
1 ответ
Вы можете перебазировать свою ветку, чтобы удалить ложный коммит. Затем вы должны использовать принудительный толчок, чтобы перенести эту перебазированную ветвь в репозиторий на Ассембле. Тогда всем разработчикам придется либо сделать новый клон, либо извлечь удаленную ветвь, а затем выполнить полную перезагрузку своей локальной ветки в новую удаленную ветвь.
В основном команды будут (не обязательно завершены):
Чтобы удалить ложный коммит:
git rebase -i $(commit id before false commit)
git commit
git push -f origin master (assuming that the branch is master and the remote at assembla is called origin)
git rebase -i запустит интерактивный режим rebase, в котором вы можете удалить коммит.
Чтобы обновить клон разработчика:
git fetch
git reset --hard origin/master
Или просто сделать свежий
git clone $(repositoryurl)
Вот идет большое жирное НО:
Когда вы это сделаете, вы должны обязательно сообщить всем разработчикам о том, что они должны подтвердить и продвинуть свою работу, прежде чем вносить изменения. Затем сделайте резервную копию из старого репозитория, чтобы вы могли восстановить его, если что-то пойдет не так