Этот вопрос похож на этот , но более конкретен.
У меня есть проект с двумя ветками ( 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
git
git-checkout
Маноло
источник
источник
reset --hard
? Если вы действительно уверены, что хотите отменить свои изменения. Или используйте тайник, если нет.git add your-file
и сделай.staging
сейчас вносить какие-либо изменения .Ответы:
Ошибка появляется, если вы изменили файл, и ветка, на которую вы переключаетесь, также содержит изменения для этого файла (с последней точки слияния).
Ваши варианты, на мой взгляд, следующие: зафиксировать, а затем внести в этот коммит дополнительные изменения (вы можете изменять коммиты в git, если они не редактируются
push
); или - используйте тайник:git stash save
создаст тайник, содержащий ваши изменения, но он не связан ни с одной фиксацией или даже ветвью.git stash pop
применит последнюю запись в тайнике к вашей текущей ветке, восстановит сохраненные изменения и удалит их из тайника.источник
add
когда оно действительноsave
... обновлено. То есть для других файлов?git stash save
без параметра имени файла сохранит все измененные файлы, если вы хотите (и вернет их в состояние последней фиксации). И наличие дополнительной копии дерева каталогов никогда не повредит, но я всегда параноидально относился к этому.master
ветку. Также как вариант были быpop
изменения в другой ветке?master
, но при этом будет потеряно текущее содержимое, а поскольку это содержимое не зафиксировано, будет невозможно вернуться в это состояние позже, поэтому возникает ошибка, поэтому вы потом не расстроится из-за потерянных изменений.Я столкнулся с той же проблемой и решил ее
и его спецификация довольно ясна.
источник
Вы можете принудительно проверить свою ветку, если не хотите фиксировать локальные изменения.
источник
sudo
не обязательно, это только нарушит права доступа к файлам. Это та же команда git, которую опубликовал @kiki_yu годом ранее, но она еще хуже.Что ж, будьте осторожны с
-f
переключателем. Если вы воспользуетесь-f
переключателем, вы потеряете все незафиксированные изменения . Хотя могут быть некоторые варианты использования-f
, в которых полезно использовать , в большинстве случаев вы можете захотеть внестиstash
свои изменения, а затем выполнитьswitch
ветки.stashing
Процедура описана выше.источник
Вы можете выполнить фиксацию в текущей ветке, оформить заказ в другую ветку и, наконец, выбрать эту фиксацию (вместо слияния).
источник
Если вы получили это при попытке проверить другую ветку:
Это означает, что у вас есть некоторые изменения, которые вам нужно зафиксировать в ветке, которую вы извлекли, или вам нужно либо стереть, либо спрятать их, как большинство из вышеперечисленных пунктов. В 19 из 20 случаев у меня гораздо больше шансов просто зафиксировать свои изменения.
Теперь, когда вы это сделали, вы можете проверить другую ветку и довольно легко переключаться туда и обратно.
Просто убедитесь, что вы оба находитесь в правой ветке и нажимаете на правую ветку, когда запускаете команду git push origin $ {branch}. Примечание: если ваш проект подключен непосредственно к Intellij, вы можете увидеть, что вы изменили свою ветку в правом нижнем углу главного окна.
источник