Страницы

Поиск по вопросам

среда, 19 декабря 2018 г.

Как принудительно перезаписать локальные файлы во время git pull?

Как принудительно перезаписать локальные файлы во время git pull?
Имею следующий сценарий:
Один из коллег вносит изменения в шаблоны веб-сайта, на котором мы работаем. Он добавляет несколько изображений в соответствующую директорию (но забывает добавить их в систему контроля версий). Затем он отправляет мне эти изображения по почте. Я добавляю изображения в систему контроля версий и отправляю их на Github вместе с другими изменениями. Сотрудник не может обновить свою версию проекта из Github, потому что git не переписывает его локальные файлы.
Ошибка выглядит так:
error: Untracked working tree file 'public/images/icon.gif' would be overwritten by merge.
Как заставить Git перезаписать локальные файлы? Упомянутый сотрудник – дизайнер, и обычно все конфликты решаются мною вручную: я слежу, чтобы на сервере была самая последняя версия всех файлов, то есть мой коллега должен обновлять локальные файлы на своем компьютере.
Перевод вопроса «Force Git to overwrite local files on pull» @Jakub Troszok


Ответ

Важно: Изменения, сделанные вами локально, будут потеряны. Как с опцией --hard, так и без нее, будут утеряны любые локальные коммиты, не отправленные на сервер. [*]
Если у вам есть не отслеживаемые локальные файлы (например, загруженные пользователями), они не будут затронуты.

Скорее всего, правильным решением в данном случае будет:
git fetch --all git reset --hard origin/master
Или если вы находитесь в другой ветке:
git reset --hard origin/your_branch
Пояснение:
Команда git fetch загружает последнюю версию файлов из удаленного репозитория, не пытаясь что-либо объединить или синхронизировать (merge или rebase).
Затем git reset назначает главной веткой ту, которую вы только что обновили. Опция --hard изменяет все файлы в вашей рабочей ветке в соответствии с файлами в origin/master

[*]: Важно отметить, что поддерживать актуальность локальных изменений можно, если создать отдельную ветку от master перед тем, как выполнить git reset
git checkout master git branch new-branch-to-save-current-commits git fetch --all git reset --hard origin/master
После этого все старые версии будут храниться в new-branch-to-save-current-commits. Неподтвержденные изменения, тем не менее (даже индексированные), будут утеряны. Поэтому индексируйте и добавляйте в локальный репозиторий все, что вам может пригодиться.
Перевод ответа «Force Git to overwrite local files on pull» @RNA

Комментариев нет:

Отправить комментарий