Как игнорировать следующее сообщение об ошибке в Git pull?
Ваши локальные изменения в следующих файлах будут перезаписаны слиянием
Что если я хочу перезаписать их?
Я пробовал такие вещи, как git pull -f
, но ничего не работает.
Чтобы было ясно, я хочу перезаписать только определенные изменения, а не все.
Если вы хотите удалить все локальные изменения из вашей рабочей копии, просто спрячьте их:
git stash save --keep-index
Если они вам больше не нужны, вы можете бросить этот тайник:
git stash drop
Если вы хотите перезаписать только определенные части ваших локальных изменений, есть две возможности:
Зафиксируйте все, что вы не хотите перезаписывать, и используйте метод выше для остальных.
Используйте git checkout path / to / file / to / revert
для изменений, которые вы хотите перезаписать. Убедитесь, что файл не поставлен с помощью git reset HEAD path / to / file / to / revert
.
Вот решение, которое отбрасывает поэтапные изменения:
git reset file/to/overwrite
git checkout file/to/overwrite
Вы можете либо зафиксировать свои изменения до слияния, либо спрятать их:
Git Stash Save
git merge origin / master
git stash pop
Если вы хотите отменить локальные изменения в одном файле, вы можете сделать следующее:
git checkout -- <file>
Затем вы можете перезаписать файл [ы] с последней версией, просто делая:
git pull
Если ваш репозиторий содержит несколько файлов, которые удалены из master
:
git checkout master
git fetch origin
git reset --hard origin / master
git checkout -b newbranch
Иногда ничего из этого не работает. Раздражает, что из-за LF, я думаю, что будет работать deleting файлы, then тянет. Не то чтобы я рекомендовал это решение, но если файл не существует, git бесполезно сообщит вам, что ваши изменения (которые могут даже не быть изменениями) будут переопределены и позволят вам продолжить.
Используйте на свой страх и риск.
В недавнем Git вы можете добавить команду -r
/ -- rebase
в команду pull
, чтобы восстановить текущую ветку в верхней части ветки вверх по течению после извлечения. Предупреждение должно исчезнуть, но есть риск, что вы получите некоторые конфликты, которые вам нужно будет решить.
В качестве альтернативы вы можете с силой проверить другую ветку, а затем снова вернуться к master
, например,.:
git checkout origin/master -f
git checkout master -f
Затем потяните его снова, как обычно:
git pull origin master
Использование этого метода может сэкономить ваше время от тайников (git stash
) и потенциальных проблем с разрешением, повторной оценки файлов (git reset HEAD --hard
), удаления файлов (git clean -fd
) и т. Д. Также выше это легче запомнить.
Эта проблема заключается в том, что вы внесли локальные изменения в файл / файлы, и те же файлы существуют с изменениями в репозитории Git, поэтому перед извлечением / нажатием вам понадобятся локальные изменения:
Перезаписать локальные изменения одного файла:
git reset file/to/overwrite
git checkout file/to/overwrite
Перезаписать все локальные изменения (изменения во всех файлах):
git stash
git pull
git stash pop
Также эта проблема может быть из-за того, что вы находитесь в ветке, которая не объединена с основной веткой.
Лучший способ решить эту проблему - это:
git checkout -- <path/file_name>
После этого вы можете перезаписать файл с помощью:
git pull origin master
Вы можете использовать это для перезаписи файла
git checkout file_to_overwrite
Это сработало для меня, чтобы отменить изменения на удаленном сервере в реальном времени и извлечь из исходного управления GitHub:
git reset --hard
git pull origin master
git reset --hard & & git clean -df
Внимание : это сбросит и удалит все не отслеживаемые файлы.
Вот моя стратегия решения проблемы.
Постановка проблемы
Нам нужно внести изменения в более чем 10 файлов. Мы попробовали PULL (git pull origin master)
, но Git крикнул:
ошибка: ваши локальные изменения в следующих файлах будут перезаписаны путем слияния: Пожалуйста, зафиксируйте ваши изменения или спрячьте их, прежде чем сможете слияние.
Мы попытались выполнить «commit», а затем «pull», но они тоже не работали.
Решение
На самом деле мы были в грязной стадии, потому что файлы находились в «Строительной зоне» a.k.a «Индексной области», а некоторые были в «Заглавной области» a.k.a «локальном каталоге Git». И мы хотели извлечь изменения с сервера.
Проверьте эту ссылку для получения информации о различных этапах Git в ясной форме: GIT Stages
Мы выполнили следующие шаги
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. Стирание берет грязное состояние вашего рабочего каталога, то есть вашего измененного отслеживаемого файлы и поэтапные изменения - и сохраняет его в стопке незаконченных изменения, которые вы можете повторно применить в любое время.
Если вы хотите перезаписать конкретные изменения, вам нужен какой-то способ сказать, какие из них вы хотите забыть.
Вы можете попытаться выборочно спрятать изменения, от которых хотите отказаться, используя git stash --patch
, а затем уронить этот тайник с помощью git stash drop
. Затем вы можете нажать на удаленные изменения и объединить их как обычно.
У меня был особый случай: у меня был файл с --assume-unchanged на нем. Было трудно найти, так как команда git status
не показывала никаких изменений
Если вы хотите сохранить производственные изменения на сервере, просто объединитесь в новый элемент конфигурации. Метод обработки следующий:
git stash
git pull
git stash pop
Может быть, вы не выполняете все операции. Вы можете знать, что вы можете сделать дальше.
Ошибка «Ваши локальные изменения в следующих файлах будут перезаписаны слиянием» возникает потому, что у вас есть некоторые изменения в локальном репо, которые еще НЕ были зафиксированы, поэтому перед извлечением из удаленного репо просто зафиксируйте изменения в локальном репо.
Допустим, у вашего удаленного репо есть ветка xyz и вы хотите, чтобы эта удаленная ветка repo xyz была объединена (скопирована) в локальную ветку repo xyz
{
git checkout xyz //check out to the respective branch in local repo
git commit -m "commiting message" //commit changes if any, in local repo branch xyz
git pull //it pulls remote xyz branch into local xyz branch
}