Вот моя стратегия для решения проблемы.
Постановка задачи
Нам нужно внести изменения более чем в 10 файлов. Мы пытались PULL (git pull origin master)
, но Гит кричал:
ошибка: Ваши локальные изменения в следующих файлах будут перезаписаны слиянием. Пожалуйста, передайте изменения или сохраните их перед тем, как объединить.
Мы пытались выполнить commit
и тогда pull
, но они тоже не сработали.
Решение
На самом деле мы были в грязной стадии, потому что файлы находились в «промежуточной области», также называемой «индексной областью», а некоторые находились в «головной области» или «локальной директории Git». И мы хотели вытащить изменения с сервера.
Проверьте эту ссылку для получения информации о различных этапах Git в понятной форме: этапы GIT
Мы выполнили следующие шаги
git stash
(это сделало наш рабочий каталог чистым. Ваши изменения хранятся в стеке Git).
git pull origin master
(Вытащить изменения с сервера)
git stash apply
(Применены все изменения из стека)
git commit -m 'message'
(Совершил изменения)
git push origin master
(Перенес изменения на сервер)
git stash drop
(Бросить стек)
Давайте разберемся, когда и зачем нужно прятаться
Если вы находитесь в грязном состоянии, это означает, что вы вносите изменения в свои файлы, а затем вы по какой-либо причине вынуждены тянуть или переключаться на другую ветку для какой-то очень срочной работы, поэтому на данный момент вы не можете тянуть или переключаться, пока вы не совершите изменения. Команда stash
здесь как рука помощи.
Из книги ProGIT , 2-е издание:
Часто, когда вы работали над частью своего проекта, все в беспорядке, и вы хотите немного переключить ветки, чтобы работать над чем-то другим. Проблема в том, что вы не хотите делать коммит наполовину проделанной работы, чтобы потом вернуться к этому вопросу. Ответом на этот вопрос является команда git stash. Stashing берет грязное состояние вашего рабочего каталога, то есть ваших измененных отслеживаемых файлов и поэтапных изменений, и сохраняет его в стек незавершенных изменений, которые вы можете повторно применить в любое время.