Страницы

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

пятница, 13 декабря 2019 г.

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

#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. Игнорируемые файлы, вроде бы, перетираются без вопросов.

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

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