Ответ 1
Хорошо с помощью двух других ответов я придумал прямое решение:
git checkout HEAD^ file/to/overwrite
git pull
Как игнорировать следующее сообщение об ошибке Git pull?
Ваши локальные изменения в следующие файлы будут перезаписаны слиянием
Что делать, если я хочу их переписать?
Я пробовал такие вещи, как git pull -f
, но ничего не работает.
Чтобы быть ясным, я хочу только переписать конкретные изменения, а не все.
Хорошо с помощью двух других ответов я придумал прямое решение:
git checkout HEAD^ file/to/overwrite
git pull
Если вы хотите удалить все локальные изменения из вашей рабочей копии, просто спрячьте их:
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 --hard
git pull
Вот решение, которое отбрасывает поэтапные изменения:
git reset file/to/overwrite
git checkout file/to/overwrite
Вы можете либо зафиксировать свои изменения, прежде чем выполнять слияние, либо занести их:
git stash save
git merge origin/master
git stash pop
Если вы хотите отменить ваши локальные изменения в одном файле, вы можете сделать следующее:
git checkout -- <file>
Затем вы можете перезаписать файл [s] последней версией, просто выполнив:
git pull
Если ваш репозиторий содержит несколько файлов, которые удаляются из master
:
git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
Иногда ни одна из этих работ не работает. Раздражающе, из-за LF, что я думаю, что будет работать, это удалить файлы, а затем потянуть. Не то, чтобы я рекомендую это решение, но если файл не существует, 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 stash save --keep-index
не работал для меня.
команда ниже работала так, как ожидалось.
git reset --hard
git pull
Он отменяет все локальные изменения, если они вам не нужны.
Эта проблема возникает из-за того, что вы вносили изменения локально в файл /s, и один и тот же файл/с существует с изменениями в репозитории Git, поэтому перед pull/push вам понадобятся локальные изменения stash:
Чтобы перезаписать локальные изменения одного файла:
git reset file/to/overwrite
git checkout file/to/overwrite
Чтобы перезаписать все локальные изменения (изменения во всех файлах):
git stash
git pull
git stash pop
Также эта проблема может быть из-за того, что вы находитесь на ветке, которая не объединена с главной ветвью.
Вы можете использовать это для перезаписывания файла
git checkout file_to_overwrite
Это сработало для меня, чтобы отменить изменения на удаленном удаленном сервере и вытащить из источника управления GitHub:
git reset --hard
git pull origin master
Лучший способ решить эту проблему:
git checkout -- <path/file_name>
После этого вы можете перезаписать файл:
git pull origin master
git reset --hard && git clean -df
Предостережение. Это приведет к сбросу и удалению всех неотслеживаемых файлов.
Если вы хотите переписать определенные изменения, вам нужно как-то сказать, какие из них вы хотите забыть.
Вы можете попробовать выборочно скопировать изменения, которые вы хотите отказаться, используя git stash --patch
, а затем сбросить этот штамп с помощью git stash drop
. Затем вы можете удалить удаленные изменения и слить их как обычно.
Вот моя стратегия для решения проблемы.
Постановка задачи
Нам нужно внести изменения в более чем 10 файлов. Мы попробовали PULL (git pull origin master)
, но Гит крикнул:
Ошибка: ваши локальные изменения в следующих файлах будут перезаписаны слиянием: пожалуйста, зафиксируйте свои изменения или запишите их, прежде чем сможете объединиться.
Мы попытались выполнить commit
а затем pull
, но они тоже не работали.
Решение
На самом деле мы были на грязной сцене, потому что файлы находились в "промежуточной области", также известной как "Индексная область", а некоторые из них были в "Head Area", а также "локальном каталоге Git". И мы хотели вывести изменения с сервера.
Проверьте эту ссылку для информации о различных этапах Git в ясной форме: GIT Stages
Мы выполнили следующие шаги
git stash
(это сделало наш рабочий каталог чистым. Ваши изменения хранятся в стеке Git).git pull origin master
(Потяните за изменения с сервера)git stash apply
(применяется все изменения из стека)git commit -m 'message'
(git commit -m 'message'
изменение)git push origin master
(git push origin master
изменения на сервер)git stash drop
(Drop the stack)Позвольте понять, когда и зачем вам нужно
Если вы находитесь в грязном состоянии, это означает, что вы вносите изменения в свои файлы, а затем по какой-либо причине вы вынуждены тянуть или переключаться на другую ветку для очень срочной работы, поэтому на данный момент вы не можете тянуть или переключитесь до тех пор, пока вы не зафиксируете изменения. Команда stash
здесь как рука помощи.
Из книги ProGIT, 2-е издание:
Часто, когда вы работали над частью своего проекта, все в грязном состоянии, и вы хотите немного переключить ветки на работу над чем-то другим. Проблема в том, что вы не хотите совершать совершение половинной работы, чтобы вы могли вернуться к этому вопросу позже. Ответ на этот вопрос - команда git stash. Stashing берет грязное состояние вашего рабочего каталога - то есть ваши измененные отслеживаемые файлы и поэтапные изменения - и сохраняет его в стеке незавершенных изменений, которые вы можете повторно применить в любое время.
У меня был особый случай: у меня был файл с - без изменений на нем. Было трудно найти, так как команда git status
не показывала никаких изменений
Если вы хотите сохранить производственные изменения на сервере, просто объединитесь в новый элемент конфигурации. Метод обработки выглядит следующим образом:
git stash
git pull
git stash pop
Возможно, вы не выполняете все операции. Вы можете знать, что вы можете сделать дальше.
Я игнорировал файл в своем репо, и когда я сделал git pull upstream master
, я получил следующую ошибку:
Ошибка: ваши локальные изменения в следующих файлах будут перезаписаны с помощью объединения: myfile.js Пожалуйста, сделайте свои изменения или запишите их, прежде чем сможете объединиться. Aborting
Чтобы решить эту проблему, я сделал следующее
git update-index --no-assume-unchanged myfile.js
Затем я сделал git status
и получил это сообщение
В ветке мастера Ваша ветка отстает от "origin/master" на 4 фиксации, и может быть быстро перенаправлен. (используйте "git pull", чтобы обновить локальную отделение)
Изменения не выполняются для фиксации: (используйте "git add..." для обновления что будет сделано) (используйте "git checkout -...", чтобы отменить изменения в рабочем каталоге)
modified: myfile.js
изменений не было добавлено в commit (используйте "git добавить" и/или "git commit -a" )
Тогда я сделал git checkout myfile.js
, а затем git pull upstream master
. На этот раз операция git pull была успешной.
Я столкнулся с этим, когда потянулся от мастера.
Способ обработки, используя Visual Studio;
Надеюсь это поможет!
Если эта ошибка вызвана концами строк,
git add
git checkout mybranch
будет работать. Я не совсем уверен, почему он работает.
Для Pycharm вы можете сделать Git--> Revert, а затем потянуть.
Это сообщение также может случиться, если используется git-lfs
и указатель файла был перезаписан реальным файлом.
то вы используете:
git stash
git lfs migrate import
git pull
полный вывод из моего дела
λ git stash
Saved working directory and index state WIP on master: 5d4ad47 Merge branch 'feature/...' into 'master'
Encountered 1 file(s) that should have been pointers, but weren't:
public/apple-touch-icon.png
λ git pull
Updating 5a4ad44..b25f79d
error: Your local changes to the following files would be overwritten by merge:
public/apple-touch-icon.png
Please commit your changes or stash them before you merge.
Aborting
λ git lfs migrate import
migrate: Fetching remote refs: ..., done
migrate: Sorting commits: ..., done
migrate: Rewriting commits: 100% (0/0), done
migrate: Updating refs: ..., done
migrate: checkout: ..., done
λ git pull
Updating 5d4ad47..a25c79a
Fast-forward
public/apple-touch-icon.png | Bin 2092 -> 130 bytes
public/favicon.ico | Bin 6518 -> 1150 bytes
2 files changed, 0 insertions(+), 0 deletions(-)
Я пробовал, и он успешно, прежде чем потянуть, разрешить совершить весь файл, который вы не совершили, тогда вы не получите эти сообщения от AS.
Я получил то же сообщение об ошибке, выполнил
: Команда PluginUpdate из командной строки редактора vim
"Пожалуйста, передайте изменения или спрячьте их перед тем, как объединить"
1. просто физически удалил папку, содержащую плагины из
rm -rf ~/.vim/bundle/plugin-folder/
2. и переустановил его из командной строки vim,
: PluginInstall!
потому что мой ~/.vimrc содержал инструкции для сборки плагина к этому месту назначения:
это создало правильную папку,
и получил новый пакет в эту папку ~./. vim/bundle/reinstalled-plugins-folder
Знаки " ! " (Из-за неудачной команды PluginUpdate) были изменены
в знак " + ", и после этого сработала команда PluginUpdate.
Самое простое решение:
git reset --hard && git pull
Я новичок в git и не уверен, что мое решение - хорошая идея.
Я проверил ВСЕ ответы, и ни один из них не помог мне!
Но я нашел другое решение:
1. Backup both of local and repository versions of the file.
2. Delete the file from repository.
3. git add .
4. git commit
5. git push
Надеюсь, это поможет.