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

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

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

WP-содержание /W3TC-конфигурации /master.php

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

Итак, я побежал,

git checkout -- wp-content/w3tc-config/master.php

и попробовал еще раз, и я получил то же сообщение. Я предполагаю, что w3tc изменил что-то в файле конфигурации на сервере. Мне все равно, идет ли локальная копия или удаленная копия на сервер (я думаю, что удаленная копия лучше всего), я просто хочу иметь возможность объединить остальные мои изменения (обновления плагинов).

Есть идеи?

Ответ 1

Вы не можете объединиться с локальными изменениями. Git защищает вас от потери потенциально важных изменений.

У вас есть три варианта:

  • Зафиксируйте изменения, используя

    git commit -m "My message"
    
  • Бросьте это.

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

    Чтобы запрограммировать, введите

    git stash
    

    Сделайте слияние, а затем вытащите тайник:

    git stash pop
    
  • Отменить локальные изменения

    с помощью git reset --hard
    или git checkout -t -f remote/branch

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

    используя git checkout filename

Ответ 2

git stash
git pull <remote name> <remote branch name> (or) switch branch
git stash apply --index

Первая команда временно сохраняет ваши изменения в stash и удаляет их из рабочего каталога.

Вторая команда переключает ветки.

Третья команда восстанавливает изменения, которые вы сохранили в stash (опция --index полезна, чтобы удостовериться, что поэтапные файлы все еще поставлены).

Ответ 3

Вы можете попробовать один из следующих способов:

перебазироваться

Для простых изменений попробуйте перезагрузить его сверху, потянув за изменения, например.

git pull origin master -r

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

Это эквивалентно командам checkout master, fetch и rebase origin/master git.

Это потенциально опасный режим работы. Он переписывает историю, которая не сулит ничего хорошего, когда вы уже опубликовали эту историю. Не используйте этот параметр, если вы не внимательно прочитали git-rebase(1).


фотографии

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

git checkout origin/master -f
git checkout master -f

reset

Если вам не нужны ваши локальные изменения, попробуйте reset его в HEAD (исходное состояние), например

git reset HEAD --hard

Если выше не помогло, это могут быть правила в файле нормализации git (.gitattributes), поэтому лучше совершить то, что он говорит. Или ваша файловая система не поддерживает разрешения, поэтому вам нужно отключить filemode в конфигурации git.

Связано: Как заставить "git pull" для перезаписывания локальных файлов?

Ответ 4

Итак, ситуация, в которой я столкнулся, была следующей:

Ошибка: ваши локальные изменения в следующих файлах будут перезаписаны с помощью объединения: WP-содержание/W3TC-конфигурации/master.php Пожалуйста, сделайте свои изменения или запишите их, прежде чем сможете объединиться.

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

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

То, что происходило, было (я думаю, не на 100% положительным), что начальный крюк сообщения git начинал работать и зависал из-за изменений движения в удаленном репозитории сервера, что теоретически не должно было быть затронуто.

Итак, что я закончил делать, проследив через крюк после получения и обнаружив это, нужно было перейти в удаленный репозиторий на сервере, и произошли изменения (которые не были в моем локальном репозитории, который, на самом деле, сказал, что он соответствует, никаких изменений, ничего не зафиксировать, обновлено и т.д.). Так что, когда на локальном сервере изменений не было, на сервере я сделал git checkout -- some/file.ext, а затем локальный и удаленный хранилища на самом деле соответствовали, и я мог продолжать работать и развертывать. Не совсем уверен, как эта ситуация произошла, хотя несколько десятков разработчиков плюс ИТ-изменения могут иметь какое-то отношение к ней.

Ответ 5

Попробуй это

git stash save ""

и попробуйте снова вытащить

Ответ 6

ВНИМАНИЕ: Это приведет к удалению неотслеживаемых файлов, поэтому это не лучший ответ на этот вопрос.

В моем случае я не хотел хранить файлы, так что это сработало для меня:

Git 2.11 и новее:

git clean  -d  -fx .

Старый Git:

git clean  -d  -fx ""

Ссылка: http://www.kernel.org/pub/software/scm/git/docs/git-clean.html

  • -x означает, что игнорируемые файлы также удаляются, а также файлы, неизвестные git.

  • -d означает удаление неотслеживаемых каталогов в дополнение к неотслеживаемым файлам.

  • -f требуется, чтобы заставить его работать.

Ответ 7

Просить фиксацию до вытягивания

  • git stash
  • git pull origin << branchname >>

Если нужно:

  • применить git stash

Ответ 8

В моем случае я сделал резервную копию, а затем удалил файл, который Git жаловался, зафиксировал, после чего я смог наконец проверить другую ветку.

Затем я заменил файл, скопировал его содержимое и продолжал, как будто ничего не произошло.

Ответ 10

Я попробовал первый ответ: git stash с наибольшим количеством очков, но сообщение об ошибке все еще появлялось, и затем я нашел эту статью для фиксации изменений вместо stash "Reluctant Commit".

и сообщение об ошибке исчезло окончательно:

1: git add.

2: git commit -m "this is an additional commit"

3: git checkout the-other-file-name

тогда это сработало. надеюсь, этот ответ поможет. :)

Ответ 11

Для меня работал только git reset --hard.

Фиксация не была вариантом, так как нечего было коммитить.

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

Похоже, это могло быть из исключенных файлов в .git/info/exclude и с помощью git update-index --assume-unchanged <file> ' git update-index --assume-unchanged <file> некоторые файлы.

Ответ 12

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

  1. Поставь свои локальные изменения. (не фиксировать) (также необходима подготовка для исправления новых неотслеживаемых файлов)

git add.

  1. Создать патч для записи

git diff --cached > mypatch.patch

  1. Отменить локальные изменения и удалить новые локальные файлы

git reset --hard

  1. Вытащить изменения

git pull

  1. Примените свой патч

git apply mypatch.patch

Git объединяет изменения и создает файлы .rej для изменений, которые не объединяются.

И наслаждайтесь вашей дальнейшей работой над вашей функцией, и вносите свои локальные изменения, когда закончите.

Ответ 13

Если вы используете Git Extensions, вы сможете найти свои локальные изменения в Working directory, как показано ниже:

enter image description here

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

enter image description here

Когда вы обнаружили незафиксированное изменение:

Выберите строку с помощью Working directory, перейдите на вкладку Diff, щелкните правой кнопкой мыши строки карандашом (или + или -), выберите Сброс, чтобы выполнить первый коммит или совершить или спрятать или все, что вы хотите сделать с ним.

Ответ 14

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

git reset --hard 
git pull