Как игнорировать ошибку при 'git pull' о том, что мои локальные изменения будут перезаписаны слиянием?
Как мне игнорировать следующее сообщение об ошибке на Git pull?
Ваши локальные изменения в следующих файлах будут перезаписаны слиянием
Что если я захочу перезаписать их?
Я пробовал такие вещи, как git pull -f
, но ничего не работает.
Чтобы было ясно, я хочу перезаписать только определенные изменения, а не все.
40 ответов
Хорошо, с помощью двух других ответов, я пришел к прямому решению:
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, кажется, сбит с толку и говорит, что я изменил файлы, которые не изменились (не могу вернуться, потому что они не изменились, но я не могу тянуть, потому что они предположительно изменились) Самый простой и самый быстрый, который я нашел до сих пор:
git stash
git stash drop
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>
Тогда я мог бы перезаписать файл, просто используя:
git pull
TL;DR;
git pull --rebase --autostash
-r, --rebase[=false|true|merges|preserve|interactive] When true, rebase the current branch on top of the upstream branch after fetching. If there is a remote-tracking branch corresponding to the upstream --autostash, --no-autostash Before starting rebase, stash local modifications away if needed, and apply the stash entry when done
Я не знаю, почему на это еще нет ответа, но решение, как видите, простое. Все ответы здесь предполагают то же самое: удалить / сохранить ваши локальные изменения и применить восходящий поток, затем (если выsave
) примените ваши локальные изменения поверх.
какой git pull --rebase --autostash
делает шаг за шагом:
1. your local changes saved by `--autostash`
2. your local commits saved by `--rebase`
3. commits from upstream applied to your branch
4. your local commits are restored on top of upstream
5. your local changes are restored to working directory
Мой случай (возможно, и ваш тоже):
У меня есть локальные изменения (изменения в рабочем каталоге):
Когда я пытаюсь получить удаленные изменения, я получаю сообщение об ошибке:
Эти изменения не пересекаются с локальными изменениями:
Итак, когда я pull --rebase --autostash
локальные изменения сохраняются и применяются без проблем автоматически
Если ваш репозиторий содержит несколько файлов, которые удаляются из master
:
git checkout master
git fetch origin
git reset --hard origin/master
git checkout -b newbranch
Иногда ничего из этого не работает. Досадно, что из-за LF я думаю, что будет работать, удаляя файлы, а затем вытягивая их. Не то чтобы я рекомендовал это решение, но если файл не существует, git не будет бесполезно сообщать вам, что ваши изменения (которые могут даже не быть изменениями) будут отменены, и позволит вам продолжить.
Используйте на свой риск.
Попробуй это
git fetch --all
git reset --hard origin/master
git pull origin master
Мне нужно заставить тянуть
git stash save --keep-index
не работал для меня.
Команда ниже работала как положено.
git reset --hard
git pull
Он отменяет все локальные изменения, если они вам не нужны.
В недавнем 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
) и т. д. Также выше легче запомнить.
Эта проблема заключается в том, что вы внесли изменения локально в файл / s, и тот же файл / файлы существует с изменениями в репозитории Git, поэтому перед pull / push вам нужно будет сохранить локальные изменения:
Чтобы перезаписать локальные изменения одного файла:
git reset file/to/overwrite
git checkout file/to/overwrite
Чтобы перезаписать все локальные изменения (изменения во всех файлах):
git stash
git pull
git stash pop
Также эта проблема может быть из-за того, что вы находитесь на ветке, которая не объединена с главной веткой.
Вот моя стратегия для решения проблемы.
Постановка задачи
Нам нужно внести изменения более чем в 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 берет грязное состояние вашего рабочего каталога, то есть ваших измененных отслеживаемых файлов и поэтапных изменений, и сохраняет его в стек незавершенных изменений, которые вы можете повторно применить в любое время.
git reset --hard && git clean -df
Это сбросит и удалит все неотслеживаемые файлы.
Это сработало для меня, чтобы отменить изменения на живом удаленном сервере и извлечь из системы управления исходным кодом GitHub:
git reset --hard
git pull origin master
Лучший способ решить эту проблему:
git checkout -- <path/file_name>
После этого вы можете перезаписать файл:
git pull origin master
Если вы хотите сохранить производственные изменения на сервере, просто объединитесь в новый элемент конфигурации. Метод обработки заключается в следующем:
git stash
git pull
git stash pop
Может быть, вы не выполняете все операции. Вы можете знать, что вы можете делать дальше.
Вы можете использовать это для перезаписи файла
git checkout file_to_overwrite
Из-за того, что ваша ветка отстает от «origin/dev» на xx коммитов, ее можно перемотать вперед. Попробуйте эту команду:
git checkout .
git pullenter code here
Надеюсь, это исправит вашу проблему.
Если вы хотите перезаписать определенные изменения, вам нужен способ сообщить, какие из них вы хотите забыть.
Вы можете попробовать выборочно сохранить изменения, от которых хотите отказаться, используя git stash --patch
а затем сбросив этот тайник с git stash drop
, Затем вы можете извлечь удаленные изменения и объединить их как обычно.
Ошибка "Ваши локальные изменения в следующих файлах будут перезаписаны слиянием" возникает из-за того, что у вас есть некоторые изменения в локальном репо, которые еще НЕ были зафиксированы, поэтому перед извлечением из удаленного репо просто зафиксируйте изменения в локальном репо.
Допустим, у вашего удаленного репо есть некоторая ветка xyz, и вы хотите, чтобы эта удаленная ветка репо xyz была объединена (скопирована в) локальную ветку репо 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
}
Пример
[root@localhost www]# git pull
Username for 'http://159.65.151.11': amol
Password for 'http://amol@159.65.151.11':
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 34 (delta 13), reused 0 (delta 0)
Unpacking objects: 100% (34/34), done.
From http://159.65.151.11/OpenCC
f793c8e..b8fe60c v1.18.0_24Feb2022 -> origin/_v1.18.0_24Feb2022
error: Your local changes to the following files would be overwritten by merge:
cc/routes/web.php
Please, commit your changes or stash them before you can merge.
Aborting
Решение (игнорировать уже зафиксированное изменение в локальном файле)
git checkout HEAD^ cc/routes/web.php
git pull
Я игнорировал файл в моем репо, и когда я сделал 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 -..." для отмены изменений в рабочем каталоге)
изменено: myfile.js
изменения не добавлены в коммит (используйте "git add" и / или "git commit -a")
Тогда я сделал git checkout myfile.js
с последующим git pull upstream master
, На этот раз операция git pull прошла успешно.
Для меня это сработало:-
- Сначала я очистил все неотслеживаемые файлы, запустил->
git clean -f
. -
git pull
У меня был особый случай: у меня был файл с --assume-неизмененным. Это было трудно найти, так как git status
команда не показывала никаких изменений
Я сталкивался с этим, когда тянул от мастера.
То, как я справился, используя Visual Studio;
- Сначала я выполнил Undo commit для своего решения.
- Затем я выполнил процесс 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
Надеюсь это поможет.