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)

Вот идет большое жирное НО:

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

Другие вопросы по тегам