У меня есть проект с двумя ветками: staging и beta. Я разрабатываю на staging и использую ветку master для исправления ошибок. Поэтому, если я работаю над постановкой и вижу ошибку, я перехожу на ветку master:
Но теперь, когда я пытаюсь перейти на ветку 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
Ошибка появляется, если вы изменили файл и ветка, на которую вы переключаетесь, также содержит изменения для этого файла (с последней точки слияния).
Ваши варианты, на мой взгляд, следующие: зафиксировать, а затем внести в этот коммит дополнительные изменения (вы можете изменять коммиты в 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
затем попробуйте снова проверить ветку.
Если желаемая ветка не нова, вы можете выбрать фиксацию и исправить конфликты или сохранить изменения, а затем исправить конфликты.