Как игнорировать ошибку в "git pull" о моих локальных изменениях, которые будут перезаписаны слиянием?

Как игнорировать следующее сообщение об ошибке на git pull?

ваши локальные изменения в следующих файлах будут перезаписаны merge

что если я хочу перезаписать их?

Я пробовал такие вещи, как git pull -f, но ничего не работает.

чтобы быть ясным, я хочу только перезаписать определенные изменения, а не все.

25 ответов


если вы хотите удалить все локальные изменения из рабочей копии, просто спрячьте их:

git stash save --keep-index

если они вам больше не нужны, теперь вы можете бросить эту заначку:

git stash drop

если вы хотите перезаписать только определенные части ваших локальных изменений, есть две возможности:

  1. зафиксируйте все, что вы не хотите перезаписывать, и используйте метод выше для остальных.
  2. использовать git checkout path/to/file/to/revert для изменения, которые вы хотите перезаписать. Делать уверен, что файл не находится в стадии через git reset HEAD path/to/file/to/revert.

хорошо с помощью двух других ответов я придумал прямое решение:

git checkout HEAD^ file/to/overwrite
git pull

это работает для меня, чтобы переопределить все локальные изменения и не требует идентификации:

git reset --hard
git pull

вот решение, которое отбрасывает поэтапные изменения:

git reset file/to/overwrite
git checkout file/to/overwrite

вы можете либо зафиксировать изменения перед слиянием, либо сохранить их:

  1. git stash save
  2. git merge origin/master
  3. git stash pop

мое решение для решения этой проблемы было:

git checkout -- <file>

тогда я мог бы перезаписать файл через:

git pull

если ваш репозиторий содержит несколько файлов, которые удаляются из master:

  1. git checkout master
  2. git fetch origin
  3. git reset --hard origin/master
  4. git checkout -b newbranch

в недавнем Git вы можете добавить -r/--rebase on 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 и тот же файл/S существует с изменениями в репозитории Git, поэтому перед pull / push вам понадобятся локальные изменения stash:

для перезаписи локальных изменений одного файла:

git reset file/to/overwrite
git checkout file/to/overwrite

заменить все локальные изменения (изменения во всех файлах):

git stash
git pull
git stash pop

также эта проблема может быть из-за того, что вы находитесь на ветке, которая не объединена с главной веткой.


иногда ничего из этого не работает. Досадно, из-за вещи LF я думаю, что будет работать удаление файлы затем потянуть. Не то чтобы я рекомендовал это решение, но если файл не существует, git не будет бесполезно сообщать вам, что ваши изменения (которые могут даже не быть изменениями) будут переопределены и позволят вам продолжить.

используйте на свой страх и риск.


вы можете использовать это для перезаписи файла

git checkout file_to_overwrite

Если вы хотите перезаписать определенные изменения, вам нужно каким-то образом сказать ему, какие из них вы хотите забыть.

вы можете попробовать выборочно хранить изменения, которые вы хотите отказаться от использования git stash --patch и затем бросив эту заначку с git stash drop. Затем вы можете вытащить удаленные изменения и объединить их как обычно.


лучший способ решить эту проблему:

git checkout -- <path/file_name>

после этого вы можете перезаписать файл с:

git pull origin master

У меня был особый случай этого: у меня был файл с --assume-unchanged на нем. Его было трудно обнаружить, так как git status команда не показывала никаких изменений


это сработало для меня, чтобы отбросить изменения на живом удаленном сервере и вытащить из системы управления версиями GitHub:

git reset --hard
git pull origin master

Если вы хотите сохранить изменения на сервере, просто сливаются в новый элемент конфигурации. Метод обработки выглядит следующим образом:

git stash
git pull
git stash pop

возможно, вы не выполняете все операции. Ты знаешь, что делать дальше.


git stash save --keep-index не работал для меня.

ниже команда работает, как ожидалось.

git reset --hard
git pull

он переопределяет все локальные изменения, если они вам не нужны.


я игнорировал файл в моем РЕПО, и когда я это сделал git pull upstream master Я получил следующую ошибку:

ошибка: локальные изменения в следующие файлы будут переписаны слияния: myfile.Яш Пожалуйста, зафиксируйте свои изменения или спрячьте их, прежде чем вы сможете объединить. Аборт

чтобы решить это, я сделал следующее

git update-index --no-assume-unchanged myfile.js
Я git status и

на ветке master ваша ветка позади "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 была успешной.


вот моя стратегия решения проблемы.

Постановка Задачи

нужно внести изменения в более чем 10 файлов. Мы пытались!--0-->, но мерзавец крикнул:

ошибка: локальные изменения в следующие файлы будут переписаны путем слияния: пожалуйста, зафиксируйте свои изменения или спрячьте их, прежде чем сможете объединить.

мы пытались выполнить commit а то pull, но они не работают любой.

решение

мы были в грязный этап на самом деле, потому что файлы были в "промежуточной области" a.к."индексная область" и некоторые из них находились в "головной области" a.к."локальный каталог Git". И мы хотели забрать изменения с сервера.

проверьте эту ссылку для получения информации о различных этапах Git в ясной форме: этапы GIT

мы следовали следующему шаги

  • git stash (это сделало наш рабочий каталог чистым. Ваши изменения хранятся в стеке Git).
  • git pull origin master (вытащите изменения с сервера)
  • git stash apply (применены все изменения из стека)
  • git commit -m 'message' (внесенные изменения)
  • git push origin master (передвинул изменения на сервер)
  • git stash drop (падение стека)

давайте поймем, когда и почему вам нужно тайник

если вы находитесь в грязный состояние, означает, что вы вносите изменения в свои файлы, а затем вы вынуждены, по любой причине,тянуть или переключатель в другой филиал для очень срочной работы, поэтому в этот момент Вы не можете тянуть или переключаться, пока не совершите изменение. The stash команда здесь как Рука помощи.

из книги ProGIT, 2-е издание:

часто, когда вы работаете над частью своего проекта, все в грязное состояние, и вы хотите немного переключить ветви, чтобы работать что-то еще. Проблема в том, что вы не хотите делать фиксацию наполовину законченная работа, чтобы вы могли вернуться к этому позже. Этот ответом на эту проблему является команда git stash. Припрятать берет грязное состояние вашего рабочего каталога, то есть измененные отслеживаемые файлы и поэтапные изменения-и сохраняет его в стопке незавершенных изменения, которые можно применить в любое время.


Я столкнулся с этим при вытягивании из Мастера.

Как я справился с этим, используя Visual Studio;

  1. во-первых, я выполнил отмену фиксации на моем решении.
  2. затем я сделал процесс git pull.

надеюсь, что это помогает!


Если эта ошибка из-за окончания строк,

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(-)

см.https://github.com/git-lfs/git-lfs/issues/2839


Я пробовал, и это успешно, прежде чем тянуть, пусть зафиксировать все файлы, которые вы не зафиксировали, тогда вы не получите эти сообщения от AS.


git reset --hard && git clean -df

это сбросит и удалит все неотслеженные файлы.