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


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

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

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

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

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

25 385

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 вам понадобятся локальные изменения:

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

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

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

git stash
git pull
git stash pop

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

иногда, ни один из них не работает. Досадно, из-за того, что я думаю, что будет работать удаление файлы затем потянуть. Не то чтобы я рекомендовал это решение, но если файл не существует, 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 Я получил следующую ошибку:

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

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

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

на ветке мастер ваша ветка позади 'origin / master' по 4 коммита, и можно промотать. (используйте "git pull", чтобы обновить локальный ветка)

изменения, не поставленные для фиксации: (используйте "git add ..." обновлять что будет совершено) (используйте " git checkout -- ..." отбрасывать изменения в рабочем каталоге)

изменено: myfile.js

никаких изменений в commit (используйте "git add" и/или"git commit-a")

тогда я сделал git checkout myfile.js следовал по git pull upstream master. Эта пора операция git pull прошла успешно.

вот моя стратегия, чтобы решить проблему.

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

нужно внести изменения в более чем 10 файлов. Мы пытались PULL (git pull origin master), но мерзавец крикнул:

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

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

решение

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

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

мы следовали следующему действия

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

давайте разберемся, когда и зачем нужен прятать

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

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

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

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

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

  1. во-первых, я выполнил Undo commit на моем решении.
  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

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