Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: ManoloОтветов: 7

Этот вопрос похож на этот, но более конкретный.

У меня есть проект с двумя ветками: staging и beta. Я разрабатываю на staging и использую ветку master для исправления ошибок. Поэтому, если я работаю над постановкой и вижу ошибку, я перехожу на ветку master:

git checkout master

и сделайте то же самое:

git add fileToAdd
git commit -m "bug fixed"

а затем сливаюсь с обеими ветками:

git checkout staging
git merge master
git checkout beta
git merge beta

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

Но теперь, когда я пытаюсь перейти на ветку master, я получаю сообщение об ошибке:

error: Your local changes to the following files would be overwritten by checkout:
src/Pro/ConvocationBundle/Controller/DefaultController.php
Please, commit your changes or stash them before you can switch branches.
Aborting

Я подумал, что надо удалить файл из области подготовки:

git reset HEAD src/Pro/ConvocationBundle/Controller/DefaultController.php

но я получаю ту же ошибку. Если я сделаю git status, я получу No changes to commit

  • Вы пробовали reset --hard? Если вы действительно уверены, что хотите отменить свои изменения. Или используйте тайник, если вы этого не сделаете. keltar 15.03.2014
  • @keltar - Нет. Я не хочу сбрасывать свои изменения. Просто оставьте их на рабочем дереве для более позднего коммита. Manolo 15.03.2014
  • Я не думаю, что вы можете переключать ветки, сохраняя незафиксированные изменения, но я легко могу ошибаться - это не совсем мое поле. Попробуйте git add your-file и зафиксируйте. keltar 15.03.2014
  • @keltar - Я раньше так работал. Я не хочу сейчас фиксировать какие-либо изменения в staging. Manolo 15.03.2014
  • Возможно, ваш конфликтующий файл не был изменен, когда вы пытались это сделать раньше. У вас есть изменения, git нужно их где-то сохранить, чтобы восстановить позже. Без коммитов это вряд ли возможно. Но если вы действительно не хотите - используйте stash, именно поэтому он существует. keltar 15.03.2014
  • @keltar - Буду признателен за подробный ответ. Manolo 15.03.2014

gitgit-mergegit-checkout

Ответы

Ответ 1 · рейтинг 156 · keltar

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

Ваши варианты, на мой взгляд, следующие: зафиксировать, а затем внести в этот коммит дополнительные изменения (вы можете изменять коммиты в git, если они не pushed); или - используйте тайник:

git stash save your-file-name
git checkout master
# do whatever you had to do with master
git checkout staging
git stash pop

git stash save создаст тайник, содержащий ваши изменения, но не связанный ни с одной фиксацией или даже ветвью. git stash pop применит последнюю запись в тайнике к вашей текущей ветке, восстанавливая сохраненные изменения и удаляя их из тайника.

Ответ 2 · рейтинг 187 · KikiYu

Я столкнулся с той же проблемой и решил ее

git checkout -f branch

и его спецификация довольно ясна.

-f, --force

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

При проверке путей из индекса не допускайте сбоев при несоединенных записях; вместо этого не объединенные записи игнорируются.

Ответ 3 · рейтинг 15 · Deepika Patel

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

git checkout -f branch_name

Ответ 4 · рейтинг 9 · BeNiza

git checkout -f ветка

Что ж, будьте осторожны с переключателем -f. Вы потеряете все незафиксированные изменения, если воспользуетесь переключателем -f. Хотя могут быть некоторые варианты использования, в которых полезно использовать -f, в большинстве случаев вы можете захотеть stash свои изменения, а затем switch ветвей. Процедура stashing объяснена выше.

Ответ 5 · рейтинг 4 · ScottyBlades

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

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

git fetch

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

Например, для разработчиков iOS:

pod deintegrate

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

Если желаемая ветка не нова, вы можете выбрать фиксацию и исправить конфликты или сохранить изменения, а затем исправить конфликты.

1. Git Stash (рекомендуется)

git stash
git checkout <desiredBranch>
git stash apply

2. Вишневый сбор (дополнительная работа)

git add <your file>
git commit -m "Your message"
git log

Скопируйте sha вашего коммита. Затем откажитесь от нежелательных изменений:

git checkout .
git checkout -- .
git clean -f -fd -fx

Убедитесь, что ваша ветка обновлена:

git fetch

Затем оформляйтесь в нужное отделение

git checkout <desiredBranch>

Затем вишня выберите другой коммит:

git cherry-pick <theSha>

Теперь исправим конфликт.

  1. В противном случае вы можете также отказаться от изменений текущих веток с помощью:
git checkout -f branch

Ответ 6 · Vitaly Zdanevich

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

Ответ 7 · mohammed arshad

у меня была такая же ошибка. На самом деле я попытался переопределить старый пакет SDK flutter новым обновленным пакетом. так что произошла ошибка.

Я открыл каталог flutter sdk с VS Code и очистил проект

используйте этот код в VSCode cmd

git clean -dxf

затем используйте git pull

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы