Как я могу разрешить 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 >>
Если нужно:
Ответ 8
В моем случае я сделал резервную копию, а затем удалил файл, который Git жаловался, зафиксировал, после чего я смог наконец проверить другую ветку.
Затем я заменил файл, скопировал его содержимое и продолжал, как будто ничего не произошло.
Ответ 9
Это, вероятно, вызвано проблемами CRLF.
Смотрите: Почему я должен использовать core.autocrlf = true в Git?
Используйте это, чтобы вытащить и принудительно обновить:
git pull origin master
git checkout origin/master -f
Ответ 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
Для меня этот метод работает лучше, чем копить. Я хочу внести последние изменения и сохранить копию моих локальных изменений и применить их впоследствии.
- Поставь свои локальные изменения. (не фиксировать) (также необходима подготовка для исправления новых неотслеживаемых файлов)
git add.
- Создать патч для записи
git diff --cached > mypatch.patch
- Отменить локальные изменения и удалить новые локальные файлы
git reset --hard
- Вытащить изменения
git pull
- Примените свой патч
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