#git #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.
Ответы
Ответ 1
Важно: Изменения, сделанные вами локально, будут потеряны. Как с опцией --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.Ответ 2
самый простой вариант («для дизайнера»): удалить файлы, про которые команда pull написала упомянутое сообщение. повторить команду pull.Ответ 3
Если взять за аксиому что сотрудник никогда не подружится с git, и не добавленные файлы нужно перетирать всегда, то я бы посоветовал ему локально добавить все в игнорлист. Для этого у него в локальной копии отредактировать в файл .git/info/exclude. Игнорируемые файлы, вроде бы, перетираются без вопросов.
Комментариев нет:
Отправить комментарий